Subject: Re: [vserver] IPv6 source address selection
From: Vincent Bernat <bernat@luffy.cx>
Date: Sun, 06 Feb 2011 11:54:34 +0100

 Sun, 06 Feb 2011 11:54:34 +0100
OoO  En cette  matinée ensoleillée  du  dimanche 06  février 2011,  vers
09:15, je disais:

> I will try to reproduce the problem on a small virtual machine.

I have  reproduced my problem  in a virtual  machine. I can  provide the
virtual machine image if needed  (Virtual Box). I have installed a stock
Lenny.

  Update : after upgrading to squeeze (2.6.32 with vserver 2.3.0.36.29),
           the problem has disappeared. I  keep the remaining of my post
           intact just for information.

debian:~# uname -a
Linux debian 2.6.26-2-vserver-amd64 #1 SMP Tue Jan 25 06:09:17 UTC 2011 x86 64 GNU/Linux

This 2.3.0.35  vserver with bindmount-dev  patch and a very  small patch
replacing use of   FUNC   by   func  .

debian:~# ip a l
1: lo: <LOOPBACK,UP,LOWER UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid lft forever preferred lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER UP> mtu 1500 qdisc pfifo fast state UP qlen 1000
    link/ether 08:00:27:db:ad:16 brd ff:ff:ff:ff:ff:ff
    inet 192.168.116.18/24 brd 192.168.116.255 scope global eth0
    inet6 2001:db8:2::3/64 scope global 
       valid lft forever preferred lft forever
    inet6 2001:db8:2::2/64 scope global 
       valid lft forever preferred lft forever
    inet6 2001:db8:2::1/64 scope global 
       valid lft forever preferred lft forever
    inet6 fe80::a00:27ff:fedb:ad16/64 scope link 
       valid lft forever preferred lft forever
3: dummy0: <BROADCAST,NOARP,UP,LOWER UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 1a:52:bf:9f:6a:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global dummy0
    inet 192.168.1.2/24 brd 192.168.1.255 scope global secondary dummy0
    inet 192.168.1.3/24 brd 192.168.1.255 scope global secondary dummy0
    inet6 fe80::1852:bfff:fe9f:6a02/64 scope link 
       valid lft forever preferred lft forever

debian:~# ip -6 route show
2001:db8:1::1 dev eth0  metric 1024  mtu 1500 advmss 1440 hoplimit 4294967295
2001:db8:2::/64 dev eth0  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev dummy0  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
default via 2001:db8:1::1 dev eth0  metric 1024  mtu 1500 advmss 1440 hoplimit 4294967295

My /etc/network/interfaces :

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 static
  address 2001:db8:2::1
  netmask 64
  up ip -6 route add 2001:db8:1::1 dev eth0
  up ip route add default via 2001:db8:1::1


auto dummy0
iface dummy0 inet static
  address 192.168.1.1
  netmask 255.255.255.0
  up iptables -t nat -A POSTROUTING -s 192.168.1.0/16 -o eth0 -j MASQUERADE

I have another host with 2001:db8:1::1/59 address. From host, I can ping
this IP.

I have setup two vserver :

/etc/vservers/vserver1/interfaces/0/dev : dummy0
/etc/vservers/vserver1/interfaces/0/ip : 192.168.1.2
/etc/vservers/vserver1/interfaces/0/prefix : 24
/etc/vservers/vserver1/interfaces/1/dev : eth0
/etc/vservers/vserver1/interfaces/1/ip : 2001:db8:2::2
/etc/vservers/vserver1/interfaces/1/prefix : 64
/etc/vservers/vserver2/interfaces/0/dev : dummy0
/etc/vservers/vserver2/interfaces/0/ip : 192.168.1.3
/etc/vservers/vserver2/interfaces/0/prefix : 24
/etc/vservers/vserver2/interfaces/1/dev : eth0
/etc/vservers/vserver2/interfaces/1/ip : 2001:db8:2::3
/etc/vservers/vserver2/interfaces/1/prefix : 64

On vserver1, if I do :

vserver1:/# nc6 2a00:1450:8002::67 80

I get on tcpdump :

11:18:31.985791 IP6 2001:db8:2::3.38081 > 2a00:1450:8002::67.80: Flags [S], seq 3421204451,
win 5760, options [mss 1440,sackOK,TS val 221191 ecr 0,nop,wscale 5], length 0

But:

vserver1:/# ip -6 a l
2: eth0: <BROADCAST,MULTICAST,UP,LOWER UP> mtu 1500 qlen 1000
    inet6 2001:db8:2::2/64 scope global 
       valid lft forever preferred lft forever
-- 
BOFH excuse #19:
floating point processor overflow