Date: Wed, 13 Mar 2019 15:54:59 -0600 From: James Gritton <jamie@gritton.org> To: Grzegorz Junka <list1@gjunka.com> Cc: freebsd-jail@freebsd.org Subject: Re: exec.fib and a jail in two subnets Message-ID: <CAOq6oud5_q3Q3sxQXecoJus%2By3nr97Yia8N=_Ng0agqZi738iA@mail.gmail.com> In-Reply-To: <e25f8982-2739-1622-0fac-c3548a7f2255@gjunka.com> References: <eae383df-72d4-0fe8-6613-cf34417e2260@gjunka.com> <6a245a1f51270c71d1da07c55ef51113@gritton.org> <e25f8982-2739-1622-0fac-c3548a7f2255@gjunka.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Mar 12, 2019 at 2:05 PM Grzegorz Junka <list1@gjunka.com> wrote: > > On 12/03/2019 19:19, James Gritton wrote: > > On 2019-03-10 13:40, Grzegorz Junka wrote: > >> Hi, > >> > >> I am not sure if this question fits better to net or jail list so > >> please delete one crosspost when replying. > >> > >> I have two routers in separate subnets (say 10.0.0.0/16 and > >> 172.16.0.0/16). I have enabled multiple fibs on the host and I am > >> trying to setup a jail so that packets from one router are returned to > >> the same router. The second subnet is configured like this: > >> > >> setfib 1 route add -net 172.16.0.0/16 -iface lagg0 > >> setfib 1 route add default 172.16.0.1 > >> > >> When the jail configuration is (differences in red): > >> > >> mta { > >> exec.fib=1; > >> ip4.addr = 172.16.0.2; > >> interface = lagg0; > >> } > >> > >> router 172.16.0.1 is able to send to and receive packets from the jail > >> as expected. > >> > >> When the jail configuration is: > >> > >> mta { > >> ip4.addr = 10.0.0.2,172.16.0.2; > >> interface = lagg0; > >> } > >> > >> then router 10.0.0.1 is also able to send and receive packets from the > >> jail as expected. > >> > >> However, when the configuration is: > >> > >> mta { > >> exec.fib=1; > >> ip4.addr = 10.0.0.2,172.16.0.2; > >> interface = lagg0; > >> } > >> > >> then router 172.16.0.1 is no longer able to receive a response from > >> the jail. The router's event log shows entry similar to the following > >> two about 2 minutes apart: > >> > >> IN: ACCEPT [54] Connection opened (Port Forwarding: TCP > >> [172.16.0.2]:80 <--> [212.159.95.213]:80 - - - > >> [111.202.101.2]:34172 CLOSED/SYN_SENT ppp3 NAPT) > >> IN: ACCEPT [57] Connection closed (Port Forwarding: TCP > >> [172.16.0.2]:80 <--> [212.159.95.213]:80 - - - > >> [111.202.101.2]:34172 CLOSED/SYN_SENT ppp3 NAPT) > >> > >> My question is why the 10.0.0.1 router is able to communicate with the > >> jail in the second configuration but 172.16.0.1 is not able to > >> communicate with the jail in the third configuration. Is it because of > >> order of IPs in ip4.addr? > >> > >> When the jail is started jls shows only the first IP from either of > >> the configuration list above (i.e. 10.0.0.2 even if exec.fib is set to > >> 1). So my guess is that the first IP is somehow a default IP? > >> > >> Then my additional question is if it's possible for a jail to be in > >> two subnets at the same time, i.e. so that when the jail responds to a > >> packet received from router 10.0.0.1 it sends it to the default route > >> from fib0 and when it responds to a packet received from 172.16.0.1 it > >> sends it to the default route from fib1. What exec.fib should be in > >> such a case? > >> > >> Any help would be greatly appreciated. Thanks! > > > > You're correct in your assumption that a jail's first IP address is > > its default: in the absence of binding a particular address for an > > outgoing connection, the first-listed address will be used. So then > > the problem with the third jail is you have a packing being sent from > > 10.0.0.2 with only the routing table that doesn't include 10.0/16. I > > can't say exactly why your second example *does* work, but at least > > from the jail side it has a default address that's reachable in its > > routing table. I'm thinking you're saying that the second jail works > > not only with 10.0 but also with 172.16 (it's the 172.16 part I'm > > unsure about). > > > > To answer your last question: sure, a jail can be in two subnets - but > > it will still use its first address by default for any outbound > > packets. Note that the FIB associated with the jail isn't *really* > > associated with the jail, but with the processes jail(8) starts for it > > - the reason for the "exec" in "exec.fib". You're still free to call > > setfib from inside the jail to access a different table. > > > > I haven't tried using two different routing tables in one jail at the > > same time; the closest I've come is one jail that routed on the > > non-default network. Outside of the jail world, I believe multiple > > routing tables implies multiple instances of servers, and that would > > be the same for inside a jail. Your router log shows port 80, so that > > would imply two different apache (or whatever) processes running the > > jail, each pointing to its own address, and rung under its own routing > > table. > > > > Many thanks for your response. The second example works with 10.0.0.1 > but not with 172.16.0.1, otherwise there would be no post. Following on > your response, lets assume that a process (e.g. nginx) listens on both > IPs, 10.0.0.2,172.16.0.2. Is it possible to configure fibs or default > routes or whatever so that when a packet arrives from 10.0.0.1 it is > send back to 10.0.0.1 and if it arrives from 172.16.0.1 it is send back > to 172.16.0.1 (thus using default routes from either fib0 or fib1 > depending if the packet came from a router in one of those network)? If > not, would it be possible to do this with some iptables/pf rules (which > I understand in FreeBSD 12 should work in a jail with VNET)? > My understanding (which I admit is imperfect) is that it's not > possible with default routes alone. At the application level, it > would be possible if nginx was either fib-aware, or if it explicitly > bound the source address of its replies - but neither of those are > things typically done at the application level. > It is possible however at the firewall level; At least I know it's > possible for ipfw (the small corner of the firewall world that I > use). A quick check of ipf and ipfilter man pages didn't show "fib" > anywhere, but don't take my word on those. It also may require a > VNET jail; I've never run a system with your exact setup so I'm > unsure whether the binding to the first (non-vnet) jail address > happens before or after the ipfilter rules. - Jamie
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOq6oud5_q3Q3sxQXecoJus%2By3nr97Yia8N=_Ng0agqZi738iA>