Router IPv6 konfiguruje sam siebie

Mam router IPv6 zrobiony na Raspberry Pi (mało istotne) na Arch Linuksie (bardziej istotne). RPi ma tylko jeden interfejs sieciowy, eth0, co jest tutaj dość istotne.

 

Mam zestawiany tunel do hurricaneelectric w prostym skrypcie, coś w stylu:

ip tunnel add $if_name mode sit remote $server_ipv4 local $client_ipv4 ttl $tunnel_ttl
ip link set $if_name up mtu $link_mtu
ip addr add $client_ipv6 dev $if_name
ip route add ::/0 dev $if_name

I ten skrypt pięknie, prosto ustawia, że ::/0 ma iść na urządzenie $if_name (czyli ip6tunnel, typu sit).

Do tego mam rzecz jasna radvd i dhcp6. I mam problem z radvd. Jego konfiguracja wygląda następująco:

interface eth0
{
     AdvSendAdvert on;
     AdvManagedFlag on;
     AdvOtherConfigFlag on;
     AdvLinkMTU 1480;

     prefix 2001:470:71:23a::/64
     {
          AdvOnLink on;
          AdvAutonomous on;
     };

     route ::/0
     {
     };

};

Problem polega na tym, że radvd rozgłasza, że oferuje routing ::/0, więc eth0 samo się konfiguruje i używa routingu ::/0… i w gruncie rzeczy wychodzi na to, że urządzenie uważa, że routing ::/0 powinien iść na adres fe80::ba27:ebff:fe92:d62b (adres link-local karty eth0) przez urządzenie eth0, podczas gdy powinien iść na urządzenie ip6tunnel. Czyli robi się pętla i rzecz jasna ze względu na to, że to samo RPi jest routerem, to routing IPv6 od razu leży w całej sieci.

 

Wszystko kiedyś było ok, ale problem pojawił się wiele aktualizacji temu. Nie naprawiłem go jeszcze, a opieram się na uruchamianiu (ręcznym) co każdy restart (na szczęście rzadko) prostego polecenia w stylu:

sudo route -6 del ::/0 gw fe80::ba27:ebff:fe92:d62b metric 204 dev eth0

W jaki sposób można temu zaradzić?

 

Próbowałem w sysctl dodać brak akceptacji dla komunikatów RA na urządzeniu eth0 przez:

net.ipv6.conf.eth0.accept_ra = 0

Ale niestety, nie działa.

Pokaż wyniki poleceń.

ip a
ip -6 route
route -6

ip a:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether 22:33:7f:e9:62:7b brd ff:ff:ff:ff:ff:ff
3: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether ae:80:3b:58:3d:2d brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:92:d6:2b brd ff:ff:ff:ff:ff:ff
    inet 172.27.13.17/24 brd 172.27.13.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:470:71:23a::1b8e/128 scope global dynamic
       valid_lft 31426sec preferred_lft 15226sec
    inet6 2001:470:71:23a:fe5e:e748:ce90:51fe/64 scope global dynamic
       valid_lft 86390sec preferred_lft 14390sec
    inet6 2001:470:71:23a::17/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fe92:d62b/64 scope link
       valid_lft forever preferred_lft forever
    inet6 fe80::44d0:a40:6779:dca4/64 scope link
       valid_lft forever preferred_lft forever
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 172.28.13.1 peer 172.28.13.2/32 scope global tun0
       valid_lft forever preferred_lft forever
6: sit0: <NOARP> mtu 1480 qdisc noop state DOWN group default
    link/sit 0.0.0.0 brd 0.0.0.0
7: ip6tunnel: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default
    link/sit 172.27.13.17 peer 216.66.80.162
    inet6 2001:470:70:23a::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::ac1b:d11/128 scope link
       valid_lft forever preferred_lft forever

ip -6 route:

2001:470:70:23a::/64 dev ip6tunnel proto kernel metric 256
2001:470:71:23a::1b8e dev eth0 proto kernel metric 256 expires 31400sec
2001:470:71:23a::/64 dev eth0 proto kernel metric 204 mtu 1480
fe80::/64 dev eth0 proto kernel metric 256
default dev ip6tunnel metric 1024

route -6:

Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
::/0 :: !n -1 11041277 lo
2001:470:70:23a::/64 :: Un 256 0 0 ip6tunnel
2001:470:71:23a::1b8e/128 :: Ue 256 0 0 eth0
2001:470:71:23a::/64 :: U 204 2 0 eth0
fe80::/64 :: U 256 0 0 eth0
::/0 :: U 1024 1 0 ip6tunnel
::/0 :: !n -1 11041277 lo
::1/128 :: Un 0 1 9408 lo
2001:470:70:23a::/128 :: Un 0 1 0 lo
2001:470:70:23a::2/128 :: Un 0 1 97 lo
2001:470:71:23a::/128 :: Un 0 1 0 lo
2001:470:71:23a::17/128 :: Un 0 2 1632 lo
2001:470:71:23a::1b8e/128 :: Un 0 1 0 lo
2001:470:71:23a:fe5e:e748:ce90:51fe/128 :: Un 0 1 0 lo
fe80::/128 :: Un 0 1 0 lo
fe80::ac1b:d11/128 :: Un 0 1 0 lo
fe80::44d0:a40:6779:dca4/128 :: Un 0 1 0 lo
fe80::ba27:ebff:fe92:d62b/128 :: Un 0 1 5857 lo
ff00::/8 :: U 256 1 0 eth0
ff00::/8 :: U 256 0 0 ip6tunnel
::/0 :: !n -1 11041277 lo

(wyniki po wykonaniu (wcześniej) komendy: route -6 del ::/0 gw fe80::ba27:ebff:fe92:d62b metric 204 dev eth0)

Mi chodziło właśnie o to, abyś podał jak to wygląda przed modyfikacjami.

Akurat zrobiłem update i restart:

 

ip a:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether 3e:13:04:cc:62:df brd ff:ff:ff:ff:ff:ff
3: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 32
    link/ether b2:57:14:89:29:6a brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:92:d6:2b brd ff:ff:ff:ff:ff:ff
    inet 172.27.13.17/24 brd 172.27.13.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:470:71:23a::1b8e/128 scope global dynamic
       valid_lft 43176sec preferred_lft 26976sec
    inet6 2001:470:71:23a:fe5e:e748:ce90:51fe/64 scope global dynamic
       valid_lft 86393sec preferred_lft 14393sec
    inet6 2001:470:71:23a::17/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fe92:d62b/64 scope link
       valid_lft forever preferred_lft forever
    inet6 fe80::44d0:a40:6779:dca4/64 scope link
       valid_lft forever preferred_lft forever
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 172.28.13.1 peer 172.28.13.2/32 scope global tun0
       valid_lft forever preferred_lft forever
6: sit0: <NOARP> mtu 1480 qdisc noop state DOWN group default
    link/sit 0.0.0.0 brd 0.0.0.0
7: ip6tunnel: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default
    link/sit 172.27.13.17 peer 216.66.80.162
    inet6 2001:470:70:23a::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::ac1b:d11/128 scope link
       valid_lft forever preferred_lft forever

ip -6 route:

2001:470:70:23a::/64 dev ip6tunnel proto kernel metric 256
2001:470:71:23a::1b8e dev eth0 proto kernel metric 256 expires 43141sec
2001:470:71:23a::/64 dev eth0 proto kernel metric 204 mtu 1480
fe80::/64 dev eth0 proto kernel metric 256
default via fe80::ba27:ebff:fe92:d62b dev eth0 metric 204 mtu 1480
default dev ip6tunnel metric 1024

route -6:

Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
::/0 :: !n -1 1 161 lo
2001:470:70:23a::/64 :: Un 256 0 0 ip6tunnel
2001:470:71:23a::1b8e/128 :: Ue 256 0 0 eth0
2001:470:71:23a::/64 :: U 204 2 0 eth0
fe80::/64 :: U 256 0 0 eth0
::/0 fe80::ba27:ebff:fe92:d62b UG 204 1 0 eth0
::/0 :: U 1024 0 0 ip6tunnel
::/0 :: !n -1 1 161 lo
::1/128 :: Un 0 1 0 lo
2001:470:70:23a::/128 :: Un 0 1 0 lo
2001:470:70:23a::2/128 :: Un 0 1 0 lo
2001:470:71:23a::/128 :: Un 0 1 0 lo
2001:470:71:23a::17/128 :: Un 0 2 154 lo
2001:470:71:23a::1b8e/128 :: Un 0 1 0 lo
2001:470:71:23a:fe5e:e748:ce90:51fe/128 :: Un 0 1 0 lo
fe80::/128 :: Un 0 1 0 lo
fe80::ac1b:d11/128 :: Un 0 1 0 lo
fe80::44d0:a40:6779:dca4/128 :: Un 0 1 0 lo
fe80::ba27:ebff:fe92:d62b/128 :: Un 0 1 8 lo
ff00::/8 :: U 256 1 0 eth0
ff00::/8 :: U 256 0 0 ip6tunnel
::/0 :: !n -1 1 161 lo

Trasa domyślna przez link-local ma niższą metrykę. Zmniejsz metrykę dla trasy domyślnej przez tunel.

ip route add ::/0 dev $if_name metric 1