LinuxでDS-Lite (楽天ひかり)なルーターをつくる。IPv6, RAも疎通する版

楽天がちょっと前まで1年無料キャンペーンをしていたのでつられて楽天ひかりに乗り換えてしまいました。楽天はIPoEではアルテリア・ネットワークを利用しているため、前やったLinuxルーターの設定もやり直しです。やっていきましょう

v6で降ってくるIP変わった

プロバイダが変わったので当然ふってくるIPv6の/64レンジも変わります。ゴリゴリ書いてあったのでやりなおしです。残念。

Tunnelデバイスの管理をsystemd-networkdでやるのやめた

IPコマンドで追加する方が楽な気がしてきたのでやめました。

$ apt purge network-manager netplan.io ifupdown
$ apt install radvd npdpp isc-dhcp-server

$ cat /etc/systemd/network/10-enp2s0.network
[Match]
Name=enp2s0

[Network]
LinkLocalAddressing=ipv6
Address=192.168.0.4/24
DHCP=no
DNS=1.1.1.1
DNS=8.8.8.8

$ cat /etc/systemd/network/10-enx18ece795bb0b.network
[Match]
Name=enx18ece795bb0b

[Link]
RequiredForOnline=yes

[Network]
DNS=2606:4700:4700::1111
IPv6AcceptRA=yes
DHCP=no
Address=2001:f70:xxxx:xxxx:xxx:xxxx:xxxx:xxxx/64

$ cat /etc/radvd.conf
interface enp2s0
{
    AdvSendAdvert on;
    prefix 2001:f70:xxxx:xxxx::/64
    {
        AdvOnLink on;
        AdvAutonomous on;
    };
    RDNSS 2606:4700:4700::1111 2001:4860:4860::8888
    {
    };
};

$ cat /etc/ndppd.conf
proxy enx18ece795bb0b {
   router no
   rule 2001:f70:xxxx:xxxx::/64 {
      iface enp2s0
   }
}

$ cat /etc/sysctl.conf
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.enx18ece795bb0b.accept_ra = 2
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
$ cat router-xpass.sh
#!/bin/sh
set -ux

RA_RANGE='2001:f70:xxxx:xxxx::/64'
REMOTE='2001:f60:0:200::1:1' # dgw.xpass.jp
LANDEV='enp2s0'
WANDEV='enx18ece795bb0b'

# udevadm info --export-db
# USBで指したLANドングルが寝ないようにするやつ
echo 'on' > /sys/bus/usb/devices/1-7/power/control

# no way to config this from systemd-networkd https://github.com/systemd/systemd/issues/928
ip -6 r replace $RA_RANGE dev enp2s0 tab 1
ip -6 rule add from all tab 1 priority 1000

iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

iptables -t mangle -A OUTPUT ! -s 127.0.0.0/8 -j MARK --set-mark 2
iptables -t nat -A POSTROUTING -m mark --mark 0x2 -j MASQUERADE

ip -6 tunnel add ds-lite mode ipip6 remote $REMOTE local 2001:f70:xxxx:xxxx:xxx:xxxx:xxxx:xxxx encaplimit none dev $WANDEV
ip link set dev ds-lite up
ip route add default dev ds-lite

これでだいたい動くようになった。より難易度の高いMAP-EをやっていたのにDS-LiteとシンプルなNATについてはいまだによくわかっていなくて若干でこずったりもした。一番注意しないといけないのはここで

iptables -t mangle -A OUTPUT ! -s 127.0.0.0/8 -j MARK --set-mark 2
iptables -t nat -A POSTROUTING -m mark --mark 0x2 -j MASQUERADE

ローカルループバックアドレス127.0.0.1以外も最近のsystemd-resolvedとかだと利用しているため、ここでフィルタリングしておかないとルーター内でのみDNSが解決できなかったりする。いまのところ127.0.0.0/8だが、もしかしたら他に除外しないといけないレンジが存在するかもしれない。問題出てきたら調べて直す所存

速度

問題ない。NTT回線自体が最近遅くなって下り200-300Mbpsくらいで頭打ちするようになってしまったためそのままです。 ちなみに楽天ひかりだとPPPoEもついてくるんですがそっちは夜8時くらいだと3Mbpsくらいになって激遅でした。