Raspberry-Pi 4Bをルータとして使用し、DS-Lite接続するための設定です。OSをUbuntu 24.04に入れ替えたので、その時の記録として。
なお、Wi-Fiルータは、リピータモードで家内LANに設置して使用しています。
Ubuntu 24.04 for Raspberry Piのダウンロードと書き込み
Install Ubuntu on a Raspberry Piのページの「Download Ubuntu Server 24.04.1 LTS」のリンクからisoイメージをダウンロードし、rpi-imagerを使ってUSBメモリへ書き込みました。
起動
上のイメージは、すぐに起動するようになっているものなので、電源をいれると起動します。アカウントは、ubuntu/ubuntuです。すぐに、更新用のパスワードの入力を求められます。HDMIに繋いで作業をしました。
USB-Etherアダプタの接続
DS-Liteを使うには、Rapsberry Piに付いているEthernetポートの他に、USB-Etherアダプタを使います。まぁ、なくても使えないことはないですがあまり意味ないので、その設定の説明はここではしません。
netplanの設定
下記の設定がnetplan
の設定です。eth0
がRaspberry PiのEthernetポート、enx18ece795fe96
がUSB-Etherポートになります。おそらく、USB-Ether側のnameserversは要らないんじゃないかと思います。
内部ネットワークは、192.168.0.0/24
で、Raspberry Piのアドレスは、192.168.0.1
にしてあります。
xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx
は、DHCPで割り当てられるipv6のアドレスです。これは、IPv6の取得 - ESPRESSObinでDS-Liteの中で取得方法を書いていますが、おそらく同じようにやれば取得できるのではないかと思います。未だにその時のアドレスを使いまわしています。yyyy.yyyy.yyyy.yyyy,yyyy.yyyy.yyyy
も同様です。
ネームサーバーの、2001:4860:4860::8888
と2001:4860:4860::8844
は、GoogleのDNSです。
network:
ethernets:
enx18ece795fe96:
dhcp4: false
dhcp6: false
ignore-carrier: true
addresses:
- 192.168.0.1/24
nameservers:
addresses:
- localhost
- 8.8.8.8
- 1.1.1.1
optional: true
eth0:
dhcp4: false
dhcp6: false
optional: false
ignore-carrier: true
addresses:
- xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx/64
routes:
- to: default
via: yyyy.yyyy.yyyy.yyyy,yyyy.yyyy.yyyy
nameservers:
address:
- 2001:4860:4860::8888 2001:4860:4860::8844
version: 2
netplan apply
とするとRaspberry-PiにIPアドレスが適用され、aptコマンドなどが使えるようになると思います。
パケットフィルタ
以上に加えて、パケットフィルタをしています。以下はどこからか拾ってきたものです。これがないとEthernetポートとUSB-Etherポート間の転送ができないんだったような。
#!/bin/sh
# ip6tables.sh
WAN_IF=eth0
LAN_IF=enx18ece795fe96
LAN_SUBNET=fd00:1fe::/64
# いったんルールをflush
ip6tables -t filter -F
ip6tables -t mangle -F
ip6tables -t nat -F
ip6tables -F
# filter tableはdefaultではINPUT, FORWARDはDROP, OUTPUTはACCEPT
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P OUTPUT ACCEPT
ip6tables -t filter -P FORWARD DROP
# loopbackはACCEPT
ip6tables -t filter -A INPUT -i lo -j ACCEPT
# LAN側はACCEPT
ip6tables -t filter -A INPUT -i $LAN_IF -j ACCEPT
# セッション確立後はACCEPT
ip6tables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ICMPv6は利用しないredirectだけDROPし、他はACCEPT
ip6tables -t filter -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type redirect -j DROP
ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT
# LAN側からWAN側にForwardされる通信はACCEPT
ip6tables -t filter -A FORWARD -s $LAN_SUBNET -o $WAN_IF -j ACCEPT
# セッション確立後はACCEPT
ip6tables -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# ICMPv6はecho-request(ping)/echo-reply(pong)のみ許可
ip6tables -t filter -A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type echo-request -j ACCEPT
ip6tables -t filter -A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type echo-reply -j ACCEPT
# mangle tableはすべてACCEPT
ip6tables -t mangle -P PREROUTING ACCEPT
ip6tables -t mangle -P INPUT ACCEPT
ip6tables -t mangle -P FORWARD ACCEPT
ip6tables -t mangle -P OUTPUT ACCEPT
ip6tables -t mangle -P POSTROUTING ACCEPT
ip6tables.sh
として保存して、rootで./ip6tables.sh
としt実行します。実行後、以下で保存しておきます。ip6tables.sh
は、iptables-persistent
パッケージにあるので、aptでインストールが必要です。
sudo ip6tables-save > /path/to/active6
routing
更にに、USB-EtherポートからのアクセスをWAN側に通すための設定です。私は、これを/etc/rc.local
に書きましたが、ちゃんとしたやり方がありそうです。
mtuの設定は3000としてありますが、不要なら削除しても大丈夫です。
#!/bin/bash
REMOTE='2404:8e00::feed:100'
LOCAL='xxxx:xxxx:xxxx:xxx:xxxx:xxxx:xxxx:xxxx'
# IPIP6 tunnel linkup
ip -6 tunnel add ip6tnl1 mode ip4ip6 remote $REMOTE local $LOCAL dev wan
ip link set dev ip6tnl1 up
ifconfig ip6tnl1 mtu 3000
# IPv4 routing
route add default dev ip6tnl1
# restore iptables
ip6tables-restore /path/to/acrive6
exit
ファイルを作成したら、chmod +x /etc/rc.local
して実行権を与えておきます。
/etc/rc.local
を実行すれば、EthernetポートとUSB-Ether間の通信ができるようになるはずです。
カーネルパラメータ
もう一つ、EthernetポートとUSB-Etherアダプタ間の通信には、パケットフォワーディングの設定がいります。/etc/sysctl.conf
で以下を設定します。
net.ipv4.ip_forward=1
これを有効にするには、以下のコマンドを使います。
sudo sysctl -p
DHCPサーバー
以下でインストールします。
sudo apt install isc-dhcp-server
設定は、192.168.0.128-192.168.0.200
をDHCPにする場合、こうなります。/etc/dhcp/dhcpd.conf
に設定します。
option domain-name "internal.aka-minnie.com";
option domain-name-servers 8.8.8.8;
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.128 192.168.0.200;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
}
設定を有効にするには、以下です。
sudo systemctl enable isc-dhcp-server
sudo systemctl restart isc-dhcp-server