From: David Ahern <dsahern@gmail.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>, netdev@vger.kernel.org
Subject: Re: [RFC PATCH 00/29] net: VRF support
Date: Thu, 05 Feb 2015 23:15:49 -0700 [thread overview]
Message-ID: <54D45C15.7090602@gmail.com> (raw)
In-Reply-To: <87r3u3vfpr.fsf@x220.int.ebiederm.org>
On 2/5/15 9:14 PM, Eric W. Biederman wrote:
> David Ahern <dsahern@gmail.com> writes:
>
>> On 2/5/15 6:33 PM, Stephen Hemminger wrote:
>>> It is still not clear how adding another level of abstraction
>>> solves the scaling problem. Is it just because you can have one application
>>> connect to multiple VRF's? so you don't need N routing daemons?
>>>
>>>
>>
>> How do you provide a service in N VRFs? "Service" can be a daemon with a listen
>> socket (e.g., bgpd, sshd) or a monitoring app (e.g., collectd, snmpd). For the
>> current namespace only paradigm the options are:
>> 1. replicate the process for each namespace (e.g., N instances of sshd, bgpd,
>> collectd, snmpd, etc.)
>>
>> 2. a single process spawns a thread for each namespace
>>
>> 3. a single process opens a socket in each namespace
>>
>> All of those options are rather heavyweight and the number of 'things' is linear
>> with the number of VRFs. When multiplied by the number of services needed for a
>> full-featured product the end result is a lot of wasted resources.
>
> If all you want is a single listening socket there are other
> implementation possibilities that are focused on solving just that
> problem, and would be much more generally applicable.
These are examples of the higher level problem -- the current need for
replicating processes/threads/sockets per namespace, not to mention the
memory consumed by the creation of the namespace itself which is fairly
high. i.e., The problem is more than just a listening socket of a single
process.
>
>> The idea here is to simplify things by allowing a single process to have a
>> presence / provide a service in all VRFs within a namespace without the need to
>> spawn a thread, socket or another process.
>>
>> For example, 1 instance of a monitoring app can still see all of the netdevices
>> in the namespace and in the VRF_ANY context can still report network
>> configuration data. VRF unaware/agnostic L3/L4 apps (e.g., sshd) do not need to
>> be modified and will be able to provide service through any
>> interface.
>
> *Blink* sshd does not need to be modified????
> Which insecure implementation on which planet?
That would be the current one -- in both cases. It is an example, Eric,
(admittedly not a good one) that existing code does not *have* to be
modified to run in a 'VRF any' context. It can be made VRF aware of course.
>
> You mean you are not interested in logging which ip and vrf pair a login
> came from? You are not interested in performing any reverse DNS
> lookups?
>
> I do believe you are strongly mistaken. I can not imagine a case where
> making it impossible to know where someone is coming from when they try
> to login to any machine is at all desirable.
Aren't you conflating two problems? Network namespaces does not require
a separate DNS config for each namespace. A user may create 2+ network
namespaces and have them share the same /etc/resolv.conf. Correct?
>
> I think it is unrealistic to expect daemons in general to listen on all
> interfaces and in all vrfs, and require trimming down the set of
> interfaces inbound connections can come from with firewall rules. That
> just seems backwards. Telling the daemons which interfaces/address to
> listen on explicitly seems much more robust.
Networking products with 1000+ interfaces? Physical, sub-interfaces,
breakout ports, VLANs, SVIs, port channels, ...
>
> The objection about logging in-bound connections applies to every
> listening daemon I can think of. I can't see how you can possibly
> seriously be proposing totally changing the networking environment of
> applications and expecting those applications to work with out changes.
Nothing stops me from having xinetd launch /bin/bash as root for all
connections to 666/tcp. Nothing about the Linux networking stack
prevents someone from running telnet or ftp. ie., the existing code base
can be used in insecure ways.
Application code -- open source daemons -- can be modified to be VRF
aware as needed. Kernel side VRF support would be made a CONFIG option
that defaults off. The macros will ensure anything VRF related falls
out, so server deployments would not be impacted.
>
>
> I do think we can come up with an API that is much less awkward than we
> have today, that would allow minimal application changes, but no
> application changes I do not believe.
Can we agree that no L2 apps should require a single line of code to be
changed? If I create 4000 VRFs -- again an L3 construct -- not one L2
application (socket based, monitoring, etc) should care. It should not
have to be replicated or modified. For L3 and up they can be made VRF
aware as needed, but that is an application problem.
>
>> VRF aware
>> apps (e.g., bgpd) might require modifications per the implementation of the VRF
>> construct but they would able to provide service with a single
>> instance.
>
> A single service instance is all that is required with network
> namespaces.
N VRFs = N namespaces = N instances of every single process, where N is
1024, 2048, 4096, and up. Someone has already done the analysis for
quagga with 1024 instances showing what a huge waste of memory that is.
>
> I do not see how code modifications that result in a slower network
> stack can possibly solve any kind of scaling problem.
I'll see what I can do to remove the skb change. That is the only
comment you have made about performance. Do you have other concerns
about performance impacts of the higher level proposal -- s/struct
net/struct net_ctx/ where net_ctx is a namespace and a VRF?
David
next prev parent reply other threads:[~2015-02-06 6:15 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-05 1:34 [RFC PATCH 00/29] net: VRF support David Ahern
2015-02-05 1:34 ` [RFC PATCH 01/29] net: Introduce net_ctx and macro for context comparison David Ahern
2015-02-05 1:34 ` [RFC PATCH 02/29] net: Flip net_device to use net_ctx David Ahern
2015-02-05 13:47 ` Nicolas Dichtel
2015-02-06 0:45 ` David Ahern
2015-02-05 1:34 ` [RFC PATCH 03/29] net: Flip sock_common to net_ctx David Ahern
2015-02-05 1:34 ` [RFC PATCH 04/29] net: Add net_ctx macros for skbuffs David Ahern
2015-02-05 1:34 ` [RFC PATCH 05/29] net: Flip seq_net_private to net_ctx David Ahern
2015-02-05 1:34 ` [RFC PATCH 06/29] net: Flip fib_rules and fib_rules_ops to use net_ctx David Ahern
2015-02-05 1:34 ` [RFC PATCH 07/29] net: Flip inet_bind_bucket to net_ctx David Ahern
2015-02-05 1:34 ` [RFC PATCH 08/29] net: Flip fib_info " David Ahern
2015-02-05 1:34 ` [RFC PATCH 09/29] net: Flip ip6_flowlabel " David Ahern
2015-02-05 1:34 ` [RFC PATCH 10/29] net: Flip neigh structs " David Ahern
2015-02-05 1:34 ` [RFC PATCH 11/29] net: Flip nl_info " David Ahern
2015-02-05 1:34 ` [RFC PATCH 12/29] net: Add device lookups by net_ctx David Ahern
2015-02-05 1:34 ` [RFC PATCH 13/29] net: Convert function arg from struct net to struct net_ctx David Ahern
2015-02-05 1:34 ` [RFC PATCH 14/29] net: vrf: Introduce vrf header file David Ahern
2015-02-05 13:44 ` Nicolas Dichtel
2015-02-06 0:52 ` David Ahern
2015-02-06 8:53 ` Nicolas Dichtel
2015-02-05 1:34 ` [RFC PATCH 15/29] net: vrf: Add vrf to net_ctx struct David Ahern
2015-02-05 1:34 ` [RFC PATCH 16/29] net: vrf: Set default vrf David Ahern
2015-02-05 1:34 ` [RFC PATCH 17/29] net: vrf: Add vrf context to task struct David Ahern
2015-02-05 1:34 ` [RFC PATCH 18/29] net: vrf: Plumbing for vrf context on a socket David Ahern
2015-02-05 13:44 ` Nicolas Dichtel
2015-02-06 1:18 ` David Ahern
2015-02-05 1:34 ` [RFC PATCH 19/29] net: vrf: Add vrf context to skb David Ahern
2015-02-05 13:45 ` Nicolas Dichtel
2015-02-06 1:21 ` David Ahern
2015-02-06 3:54 ` Eric W. Biederman
2015-02-06 6:00 ` David Ahern
2015-02-05 1:34 ` [RFC PATCH 20/29] net: vrf: Add vrf context to flow struct David Ahern
2015-02-05 1:34 ` [RFC PATCH 21/29] net: vrf: Add vrf context to genid's David Ahern
2015-02-05 1:34 ` [RFC PATCH 22/29] net: vrf: Set VRF id in various network structs David Ahern
2015-02-05 1:34 ` [RFC PATCH 23/29] net: vrf: Enable vrf checks David Ahern
2015-02-05 1:34 ` [RFC PATCH 24/29] net: vrf: Add support to get/set vrf context on a device David Ahern
2015-02-05 1:34 ` [RFC PATCH 25/29] net: vrf: Handle VRF any context David Ahern
2015-02-05 13:46 ` Nicolas Dichtel
2015-02-06 1:23 ` David Ahern
2015-02-05 1:34 ` [RFC PATCH 26/29] net: vrf: Change single_open_net to pass net_ctx David Ahern
2015-02-05 1:34 ` [RFC PATCH 27/29] net: vrf: Add vrf checks and context to ipv4 proc files David Ahern
2015-02-05 1:34 ` [RFC PATCH 28/29] iproute2: vrf: Add vrf subcommand David Ahern
2015-02-05 1:34 ` [RFC PATCH 29/29] iproute2: Add vrf option to ip link command David Ahern
2015-02-05 5:17 ` [RFC PATCH 00/29] net: VRF support roopa
2015-02-05 13:44 ` Nicolas Dichtel
2015-02-06 1:32 ` David Ahern
2015-02-06 8:53 ` Nicolas Dichtel
2015-02-05 23:12 ` roopa
2015-02-06 2:19 ` David Ahern
2015-02-09 16:38 ` roopa
2015-02-10 10:43 ` Derek Fawcus
2015-02-06 6:10 ` Shmulik Ladkani
2015-02-09 15:54 ` roopa
2015-02-11 7:42 ` Shmulik Ladkani
2015-02-06 1:33 ` Stephen Hemminger
2015-02-06 2:10 ` David Ahern
2015-02-06 4:14 ` Eric W. Biederman
2015-02-06 6:15 ` David Ahern [this message]
2015-02-06 15:08 ` Nicolas Dichtel
[not found] ` <87iofe7n1x.fsf@x220.int.ebiederm.org>
2015-02-09 20:48 ` Nicolas Dichtel
2015-02-11 4:14 ` David Ahern
2015-02-06 15:10 ` Nicolas Dichtel
2015-02-06 20:50 ` Eric W. Biederman
2015-02-09 0:36 ` David Ahern
2015-02-09 11:30 ` Derek Fawcus
[not found] ` <871tlxtbhd.fsf_-_@x220.int.ebiederm.org>
2015-02-11 2:55 ` network namespace bloat Eric Dumazet
2015-02-11 3:18 ` Eric W. Biederman
2015-02-19 19:49 ` David Miller
2015-03-09 18:22 ` [PATCH net-next 0/6] tcp_metrics: Network namespace bloat reduction Eric W. Biederman
2015-03-09 18:27 ` [PATCH net-next 1/6] tcp_metrics: panic when tcp_metrics can not be allocated Eric W. Biederman
2015-03-09 18:50 ` Sergei Shtylyov
2015-03-11 19:22 ` Sergei Shtylyov
2015-03-09 18:27 ` [PATCH net-next 2/6] tcp_metrics: Mix the network namespace into the hash function Eric W. Biederman
2015-03-09 18:29 ` [PATCH net-next 3/6] tcp_metrics: Add a field tcpm_net and verify it matches on lookup Eric W. Biederman
2015-03-09 20:25 ` Julian Anastasov
2015-03-10 6:59 ` Eric W. Biederman
2015-03-10 8:23 ` Julian Anastasov
2015-03-11 0:58 ` Eric W. Biederman
2015-03-10 16:36 ` David Miller
2015-03-10 17:06 ` Eric W. Biederman
2015-03-10 17:29 ` David Miller
2015-03-10 17:56 ` Eric W. Biederman
2015-03-09 18:30 ` [PATCH net-next 4/6] tcp_metrics: Remove the unused return code from tcp_metrics_flush_all Eric W. Biederman
2015-03-09 18:30 ` [PATCH net-next 5/6] tcp_metrics: Rewrite tcp_metrics_flush_all Eric W. Biederman
2015-03-09 18:31 ` [PATCH net-next 6/6] tcp_metrics: Use a single hash table for all network namespaces Eric W. Biederman
2015-03-09 18:43 ` Eric Dumazet
2015-03-09 18:47 ` Eric Dumazet
2015-03-09 19:35 ` Eric W. Biederman
2015-03-09 20:21 ` Eric Dumazet
2015-03-09 20:09 ` [PATCH net-next 0/6] tcp_metrics: Network namespace bloat reduction David Miller
2015-03-09 20:21 ` Eric W. Biederman
2015-03-11 16:33 ` [PATCH net-next 0/8] tcp_metrics: Network namespace bloat reduction v2 Eric W. Biederman
2015-03-11 16:35 ` [PATCH net-next 1/8] net: Kill hold_net release_net Eric W. Biederman
2015-03-11 16:55 ` Eric Dumazet
2015-03-11 17:34 ` Eric W. Biederman
2015-03-11 17:07 ` Eric Dumazet
2015-03-11 17:08 ` Eric Dumazet
2015-03-11 17:10 ` Eric Dumazet
2015-03-11 17:36 ` Eric W. Biederman
2015-03-11 16:36 ` [PATCH net-next 2/8] net: Introduce possible_net_t Eric W. Biederman
2015-03-11 16:38 ` [PATCH net-next 3/8] tcp_metrics: panic when tcp_metrics_init fails Eric W. Biederman
2015-03-11 16:38 ` [PATCH net-next 4/8] tcp_metrics: Mix the network namespace into the hash function Eric W. Biederman
2015-03-11 16:40 ` [PATCH net-next 5/8] tcp_metrics: Add a field tcpm_net and verify it matches on lookup Eric W. Biederman
2015-03-11 16:41 ` [PATCH net-next 6/8] tcp_metrics: Remove the unused return code from tcp_metrics_flush_all Eric W. Biederman
2015-03-11 16:43 ` [PATCH net-next 7/8] tcp_metrics: Rewrite tcp_metrics_flush_all Eric W. Biederman
2015-03-11 16:43 ` [PATCH net-next 8/8] tcp_metrics: Use a single hash table for all network namespaces Eric W. Biederman
2015-03-13 5:04 ` [PATCH net-next 0/6] tcp_metrics: Network namespace bloat reduction v3 Eric W. Biederman
2015-03-13 5:04 ` [PATCH net-next 1/6] tcp_metrics: panic when tcp_metrics_init fails Eric W. Biederman
2015-03-13 5:05 ` [PATCH net-next 2/6] tcp_metrics: Mix the network namespace into the hash function Eric W. Biederman
2015-03-13 5:05 ` [PATCH net-next 3/6] tcp_metrics: Add a field tcpm_net and verify it matches on lookup Eric W. Biederman
2015-03-13 5:06 ` [PATCH net-next 4/6] tcp_metrics: Remove the unused return code from tcp_metrics_flush_all Eric W. Biederman
2015-03-13 5:07 ` [PATCH net-next 5/6] tcp_metrics: Rewrite tcp_metrics_flush_all Eric W. Biederman
2015-03-13 5:07 ` [PATCH net-next 6/6] tcp_metrics: Use a single hash table for all network namespaces Eric W. Biederman
2015-03-13 5:57 ` [PATCH net-next 0/6] tcp_metrics: Network namespace bloat reduction v3 David Miller
2015-02-11 17:09 ` network namespace bloat Nicolas Dichtel
2015-02-10 0:53 ` [RFC PATCH 00/29] net: VRF support Thomas Graf
2015-02-10 20:54 ` David Ahern
2016-05-25 16:04 ` Chenna
2016-05-25 19:04 ` David Ahern
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54D45C15.7090602@gmail.com \
--to=dsahern@gmail.com \
--cc=ebiederm@xmission.com \
--cc=netdev@vger.kernel.org \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).