On Sun, May 17, 2009 at 11:39 AM, Felipe Alfaro Solana < felipe.alf...@gmail.com> wrote:
> On Sun, May 17, 2009 at 9:57 AM, Claudio Jeker > <cje...@diehard.n-r-g.com>wrote: > >> On Sun, May 17, 2009 at 01:13:29AM +0200, Felipe Alfaro Solana wrote: >> > Hi misc, >> > route add allows one to specify a directly-connected route reachable >> over an >> > interface, using the -interface switch. However, I can't seem to figure >> out >> > if it's possible to specify just the interface name to the -interface >> > switch. According to the manual page, only an IP address is allowed: >> > >> > """ >> > If the destination is directly reachable via an interface requiring >> no >> > intermediary system to act as a gateway, the -interface modifier >> should >> > be specified; the gateway given is the address of this host on the >> > common >> > network, indicating the interface to be used for transmission. >> > """ >> > >> > The thing is the interface I want to use with the -interface switch does >> not >> > have a static IP address. I could script something to get the current IP >> > address of that interface but looks hacky to me. Is it possible to do >> > something like? >> > >> > # route add -net 128.0.0.0/16 -interface vr2 >> > >> > instead in OpenBSD? I'm a little bit confused since adding the route >> while >> > using the IP address yields the following entry in the routing table: >> > >> > 128.0/16 link#3 UCS 0 0 - 8 >> vr2 >> > >> > So, why is exactly that -interface wants an IP address but does not like >> > interface names? >> > >> >> ifconfig vr2 alias 128.0.0.1/16 >> >> This will ensure that everything is correctly set up. >> Doing it with route will most probably cause issues because it will not >> setup everything correctly. You need an IP on that interface in that >> network or it will not work. > > > Thanks for your reply, Claudio. > > Initially, I tried setting up the alias directly in the vr2 interface. > However, I had problems because vr2 is an Internet-facing interface that uses > DHCP. I > used to use a custom dhclient.conf configuration file as described in [1] > but, for some reason, when the lease is renewed, I start to suffer packet > loss. A tcpdump capture shows that some TCP connections are being sourced > with the IP > alias address and not the public IP address. That's why I tried using a > loopback interface. > The problem with incorrectly-sourced IP datagrams seems to be NAT: nat on vr2 inet from 172.16.0.1/24 to any -> (vr2) round-robin This rule is created as: nat on $ext_if from $int_if:network to any -> ($ext_if) I understand the problem is the (vr2) round-robin. I have no idea, however, how to prevent PF from using the two IP addresses (the public IP and the IP alias). Any ideas how to force NAT to only use 1 IP address (the public IP address)? > > This was my custom dhclient.conf: > > interface "vr2" { > supersede domain-name "my.domain"; > supersede domain-name-servers 1.2.3.4; > } > > alias { > interface "vr2"; > fixed-address 128.0.0.1; > option subnet-mask 255.255.0.0; > } > > First time I invoke dhclient, everything seems to work fine: > > # dhclient vr2 > > DHCPREQUEST on vr2 to 255.255.255.255 port 67 > DHCPACK from 10.177.128.1 > bound to A.B.C.D -- renewal in 2590 seconds. > # ifconfig vr2 > vr2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > lladdr 00:0d:b9:18:9b:fa > priority: 0 > groups: egress > media: Ethernet autoselect (100baseTX full-duplex) > status: active > inet6 fe80::20d:b9ff:fe18:9bfa%vr2 prefixlen 64 scopeid 0x3 > inet A.B.C.D netmask 0xfffffe00 broadcast 255.255.255.255 > inet 128.0.0.1 netmask 0xffff0000 broadcast 128.0.255.255 > > However, if I call dhclient one more time, the martian IP address seems to > become the primary IP address and the public IP address the alias: > > # dhclient vr2 > DHCPREQUEST on vr2 to 255.255.255.255 port 67 > DHCPACK from 10.177.128.1 > bound to A.B.C.D -- renewal in 2579 seconds. > # ifconfig vr2 > vr2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > lladdr 00:0d:b9:18:9b:fa > priority: 0 > groups: egress > media: Ethernet autoselect (100baseTX full-duplex) > status: active > inet6 fe80::20d:b9ff:fe18:9bfa%vr2 prefixlen 64 scopeid 0x3 > inet 128.0.0.1 netmask 0xffff0000 broadcast 128.0.255.255 > inet A.B.C.D netmask 0xfffffe00 broadcast 255.255.255.255 > > Even more funny, if I want to entirely remove the martian IP address I need > to remove it twice: > > # ifconfig vr2 > vr2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > lladdr 00:0d:b9:18:9b:fa > priority: 0 > groups: egress > media: Ethernet autoselect (100baseTX full-duplex) > status: active > inet6 fe80::20d:b9ff:fe18:9bfa%vr2 prefixlen 64 scopeid 0x3 > inet 128.0.0.1 netmask 0xffff0000 broadcast 128.0.255.255 > inet A.B.C.D netmask 0xfffffe00 broadcast 255.255.255.255 > # ifconfig vr2 delete 128.0.0.1 > # ifconfig vr2 > vr2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > lladdr 00:0d:b9:18:9b:fa > priority: 0 > groups: egress > media: Ethernet autoselect (100baseTX full-duplex) > status: active > inet6 fe80::20d:b9ff:fe18:9bfa%vr2 prefixlen 64 scopeid 0x3 > inet A.B.C.D netmask 0xfffffe00 broadcast 255.255.255.255 > inet 128.0.0.1 netmask 0xffff0000 broadcast 128.0.255.255 > # ifconfig vr2 delete 128.0.0.1 > # ifconfig vr2 > vr2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > lladdr 00:0d:b9:18:9b:fa > priority: 0 > groups: egress > media: Ethernet autoselect (100baseTX full-duplex) > status: active > inet6 fe80::20d:b9ff:fe18:9bfa%vr2 prefixlen 64 scopeid 0x3 > inet A.B.C.D netmask 0xfffffe00 broadcast 255.255.255.255 > > Is this a bug in dhclient? A bug in the OpenBSD kernel? > > Thanks in advance. > > [1] > http://www.felipe-alfaro.org/blog/2009/05/08/openbsd-dynamic-and-static-ip-address-on-the-same-interface/ > > >> >> >> -- >> :wq Claudio >> >> > > > -- > http://www.felipe-alfaro.org/blog/disclaimer/ > -- http://www.felipe-alfaro.org/blog/disclaimer/