Staram się kierować ruchem IPv6 przez tunel VPN. W ten sposób powinienem móc używać IPv6 w sieci, która nie obsługuje IPv6.
Mam VPS, który ma przypisany blok IPv6. Część tego bloku chcę użyć dla klientów openvpn. Zasięg, który miałem na myśli to 2001:db8::111:800:0/112
(prefiks jest anonimowy), ponieważ openvpn obsługuje tylko / 64 i / 112 jako podsieci.
IPv6 przez tunel już działa, od klienta mogę pingować server ( 2001:db8::111:800:1
), a także interfejsy na serwerze ( 2001:db8::111:100:100
i 2001:db8:216:3dfa:f1d4:81c0
).
Chociaż podczas próby pingowania google.com z klienta nie otrzymuję odpowiedzi (limit czasu pingowania). Aby rozwiązać ten problem, użyłem programu tcpdump do przechwytywania ruchu na serwerze i widzę, że pakiety ping wychodzą, ale odpowiedzi nie wracają. Dodanie reguł dziennika do ip6tables pokazuje to samo, pakiety wychodzą, ale nic nie nadchodzi.
Użyłem internetowego narzędzia traceroute, które dostało limit czasu z mojego serwera. Próbowałem również ustawić ip bezpośrednio w interfejsie, co powoduje, że ip ( 2001:db8::111:800:1001
) jest osiągalny, więc myślę, że to problem z routingiem.
Włączyłem przekazywanie dla IPv6 przez /proc/sys/net/ipv6/conf/all/forwarding
. ip6tables ma zasady zezwalające na wszystkie łańcuchy.
Moje pytanie brzmi: co dokładnie jest potrzebne, aby linux zaakceptował ten pakiet dla adresu IP, który nie jest przypisany do interfejsu i skierował go dalej? Po prostu istniejąca trasa nie wydaje się wystarczająca.
Oto konfiguracja mojego klienta i serwera. Daj mu znać, jeśli potrzebujesz więcej informacji.
Klient
# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1001/112 scope global
valid_lft forever preferred_lft forever
# ip -6 routes
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2000::/3 dev tun0 metric 1024
serwer
# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic
valid_lft 86254sec preferred_lft 14254sec
inet6 2001:db8::111:100:100/128 scope global
valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1/112 scope global
valid_lft forever preferred_lft forever
# ip -6 route
2001:db8::111:100:100 dev eth0 proto kernel metric 256
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2001:db8::/64 dev eth0 proto kernel metric 256 expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0 proto ra metric 1024 expires 1594sec
POSTROUTING ... MASQUERADE
wnat
tabeli. Ale nie jestem pewien, czy rozumiem całkowicie. Czy próbujesz tunelować ruch IPv6? Jeśli tak, czy masz skonfigurowane odpowiednie urządzenia? Czy-p ipv6
pakiety są dozwolone w regułach IPv4 (!)?TRACE
docelowego surowego stołu iptables (może nie tyle tutaj)ip neighbour
, iip route get
. Proszę również określić, kto pingujegoogle.ca
.Odpowiedzi:
Musisz poinformować router, aby używał serwera dla tej podsieci VPN: poprawnym rozwiązaniem problemu jest dodanie trasy na routerze dla podsieci OpenVPN.
Jeśli nie możesz tego zrobić, ponieważ nie możesz dotknąć routera, innym rozwiązaniem jest skonfigurowanie serwera proxy NDP dla klientów na
eth0
łączu.Ponieważ używasz VPS, prawdopodobnie nie możesz dodawać tras do routera: prawdopodobnie musisz użyć drugiego rozwiązania.
Dodaj trasę dla podsieci
Prawidłowym rozwiązaniem problemu jest poinformowanie routera, że podsieć VPN musi być routowana przez serwer OpenVPN (dotyczy to systemu Linux):
Musisz włączyć przekazywanie IPv6 na serwerze:
Serwer proxy NDP
Wygląda na to, że router jest skonfigurowany do wysyłania całego zakresu IPv6 przez
eth0
łącze: możesz skonfigurować serwer proxy NDP.Powinieneś zobaczyć żądania NDP na
eth0
interfejsie serwera dla twojej podsieci OpenVPN, gdy próbujesz uzyskać dostęp do reszty Internetu z klienta.Musisz włączyć przekazywanie IPv6 również na serwerze i proxy NDP:
sysctl -w net.ipv6.conf.all.proxy_ndp = 1
podsieci NDP proxy
Jądro Linux nie pozwala na dodanie proxy NDP dla podsieci, ale tylko dla poszczególnych adresów IP. Możesz użyć demona (takiego jak ndppd, aby skonfigurować serwer proxy NDP dla całej podsieci (nigdy go nie używał).
Na serwer proxy NDP IP
Innym rozwiązaniem jest dodanie serwera proxy NDP dla każdego IPv6 podsieci VPN:
Powinno to działać, ponieważ masz stosunkowo niewielką liczbę adresów IP w podsieci OpenVPN.
Dynamiczny serwer proxy NDP z haczykami OpenVPN
Powinieneś być w stanie używać haków OpenVPN, aby dynamicznie dodawać proxy NDP.
Dodaj hook w conf serwera OpenVPN:
Za pomocą następującego
learn-address
skryptu:Zobacz ten wątek .
Krótka odpowiedź
źródło