Cześć
Połączenia PPPOE realizowane przez demona pppd bywają dosyć niestabilne, czasem gubi się połączenie, jest potem automatycznie wznawiane, zmienia się IP, itp.
Dlatego standardowe metody ustawiania interfejsu 6to4 w /etc/network/interfaces w Debianie czy /etc/conf.d/net w Gentoo się niezbyt sprawdzają, bo po prostu nie można restartować usług sieciowych przy każdym padzie pppd.
Na szczęście demon pppd potrafi uruchamiać skrypty przy nawiązaniu i zerwaniu połączenia, skrypty do wykonania umieszcza się w folderach /etc/ppp/ip{up|down}.d/ i tam można umieścić skrypty do ustawiania tunelu 6to4.
A więc do dzieła:
Tworzymy odpowiednie skrypty (wykonać z uprawnieniami roota), wystarczy wkleić do terminala:
cat << 6TO4UP > /etc/ppp/ip-up.d/70-6to4-up.sh
#!/bin/sh
INTERFACE="\$1"
INT6="6to4\$1"
ip route get 192.88.99.1 | grep "\$INTERFACE" 2>&1>/dev/null || exit 0
IPADDR=\$(ip route get 192.88.99.1 | awk 'NR==1 {print \$NF}');
IP6ADDR=\$(ipv4="\$IPADDR"; printf "2002:%02x%02x:%02x%02x::1" \`echo \$ipv4 | tr "." " "\`)
ip tunnel add \$INT6 mode sit ttl 128 remote any local \$IPADDR
ip link set dev \$INT6 up
ip -6 addr add "\$IP6ADDR"/16 dev \$INT6
ip -6 route add default via ::192.88.99.1 dev \$INT6 metric 1
6TO4UP
Skrypt do automatycznego tworzenia tunelu 6to4 gotowy.
cat << 6TO4DOWN > /etc/ppp/ip-down.d/70-6to4-down.sh
#!/bin/sh
INTERFACE="\$1"
INT6="6to4\$1"
ip -6 route flush dev \$INT6
ip link set dev \$INT6 down
ip tunnel del \$INT6
6TO4DOWN
Skrypt do zamykania połączenia 6to4 razem z demonem pppd gotowy.
Do tego uprawnienia:
chmod 700 /etc/ppp/ip-up.d/70-6to4-up.sh
chmod 700 /etc/ppp/ip-down.d/70-6to4-down.sh
Teraz mały test:
wyłączamy pppoe:
poff <provider>
ip -6 route show | grep 6to4
i ponownie włączamy:
pon <provider>
ip -6 route show | grep 6to4
::/96 dev 6to4ppp0 proto kernel metric 256
2002::/16 dev 6to4ppp0 proto kernel metric 256
default via ::192.88.99.1 dev 6to4ppp0 metric 1
Jak widać, interfejs 6to4ppp0 gotowy, routing ipv6 gotowy.
W przypadku używania vwdial proszę restart połączenia realizować przez ten program.
Sprawdzamy czy działa:
ping6 -c3 ipv6.google.com
PING ipv6.google.com(fra02s27-in-x02.1e100.net) 56 data bytes
64 bytes from fra02s27-in-x02.1e100.net: icmp_seq=1 ttl=59 time=33.9 ms
64 bytes from fra02s27-in-x02.1e100.net: icmp_seq=2 ttl=59 time=34.6 ms
64 bytes from fra02s27-in-x02.1e100.net: icmp_seq=3 ttl=59 time=34.0 ms
--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 33.944/34.205/34.637/0.374 ms
Jeszcze tylko trzeba ustawić firewalla dla Ipv6, w skrypcie do ustawienia ip6tables (można też wkleić do /etc/rc.local - przed exit):
ip6tables -F
ip6tables -X
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate INVALID,NEW -j DROP
Mam nadzieję, że komuś się przyda. ;)
Pozdro
Sznurki:
https://tldp.org/HOWTO/html_single/Linux+IPv6-HOWTO/ [1]
https://tldp.org/HOWTO/html_single/Linux+IPv6-HOWTO/#configuring-ipv6to4-tunnels [2]