Ubuntu 20.04でIPoE + v6プラス固定IPルータをつくる
Edgerouterではなぜかhwnatを有効化するとipipトンネルがおかしくなるみたいでhardware offloadを無効化していたのだが、やはりCPU性能がボトルネックになっていたのでノートパソコン(XPS13)でルータを作ってみた。
前回の記事での「RA Prefixの取得」を行って、
$ sudo apt install radvdump
を取得しているものとする。
環境
Ubuntu 20.04 Desktop XPS13-9360
- eth0: ONUに直結
- eth1: LAN側 (10.10.0.1/24)
Ubuntu Serverではないため、Network Managerが入っているがこれは以下で設定するnetplanと競合してしまったりするためアンインストールしておく。
$ sudo apt purge network-manager
(ここで再起動しておいたほうがいいかも)
Netplanを使用したIPアドレスとIPIPトンネリング
eth0に取得したIPv6 Prefix (240b:xxxx:xxxx:xxxx
) とISPから通知されたインターフェイスID (yyyy:yyyy:yyyy:yyyy
) を連結させたものをセットする。
IPv6のデフォルトゲートウェイを隣ルータのリンクローカルアドレス (fe80::xxxx:xxxx:xxxx:xxxx
) とする。
IPIPトンネルにはISPから通知された固定IP情報に記載されている[固定IPアドレス]と[BRアドレス]を使用する。 IPv4はこのトンネルを使用するようにする。
/etc/netplan/01-netcfg.yaml
を以下の内容で作成。
(このディレクトリにある他の設定ファイルは拡張子を変えるとかして無効化しておく)
network: version: 2 ethernets: eth0: accept-ra: false dhcp4: false dhcp6: false addresses: - 240b:xxxx:xxxx:xxxx:yyyy:yyyy:yyyy:yyyy/64 routes: - to: ::/0 via: fe80::xxxx:xxxx:xxxx:xxxx eth1: accept-ra: false addresses: - 10.10.0.1/24 - 240b:xxxx:xxxx:xxxx::1/64 nameservers: addresses: - 8.8.8.8 - 2001:4860:4860::8888 tunnels: ip6tnl1: mode: ipip6 addresses: - [固定IPアドレス] remote: [BRアドレス] local: 240b:xxxx:xxxx:xxxx:yyyy:yyyy:yyyy:yyyy routes: - to: 0.0.0.0/0 scope: link
Forwardingの設定
IPパケットの転送を有効化する。
/etc/sysctl.conf
を編集。以下のコメントを外す。
# Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1 ↓ net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6 # Enabling this option disables Stateless Address Autoconfiguration # based on Router Advertisements for this host #net.ipv6.conf.all.forwarding=1 ↓ net.ipv6.conf.all.forwarding=1
$ sudo sysctl -p
ufwの設定
/etc/default/ufw
を編集。DEFAULT_FORWARD_POLICY
をACCEPT
にする。
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that # if you change this you will most likely want to adjust your rules DEFAULT_FORWARD_POLICY="DROP" ↓ DEFAULT_FORWARD_POLICY="ACCEPT"
/etc/ufw/before.rules
を編集。最初の部分に以下を追加。
# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # ここから # Masquarade *nat :POSTROUTING ACCEPT [0:0] :PREROUTING ACCEPT [0:0] -A POSTROUTING -s 10.10.0.0/24 -j MASQUERADE COMMIT # don't delete the 'COMMIT' line or these rules won't be processed # ここまで追加
/etc/ufw/after.rules
と/etc/ufw/after6.rules
を同じように編集。最初の部分に以下を追加。
# # rules.input-after # # Rules that should be run after the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-after-input # ufw-after-output # ufw-after-forward # # ここから *mangle :POSTROUTING ACCEPT [0:0] :PREROUTING ACCEPT [0:0] -A FORWARD -o ip6tnl1 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1412 COMMIT # don't delete the 'COMMIT' line or these rules won't be processed # ここまで追加
ufwを有効化する
$ sudo ufw enable
LANからLocalへのアクセスを許可する
$ sudo ufw allow from 10.10.0.0/24
DHCPサーバ・RAの設定
IPv4アドレスはDHCPサーバで配布して、IPv6アドレスはNDProxy+RAによる告知を行う。
isc-dhcp-serverの設定
$ sudo apt install isc-dhcp-server
/etc/default/isc-dhcp-server
を編集。DHCPv4サーバがlistenするインターフェイスを指定。
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACESv4="" INTERFACESv6="" ↓ INTERFACESv4="eth1" #INTERFACESv6=""
/lib/systemd/system/isc-dhcp-server.service
を編集。PIDファイルのパスを/var/run/dhcpd.pid
へ変更。
exec dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf $CONFIG_FILE $INTERFACESv4' ↓ exec dhcpd -user dhcpd -group dhcpd -f -4 -pf /var/run/dhcpd.pid -cf $CONFIG_FILE $INTERFACESv4'
$ sudo systemctl daemon-reload
最初からある設定ファイルの名前を変えておく。
$ sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.sample
/etc/dhcp/dhcpd.conf
を以下の内容で作成。
# default default-lease-time 600; max-lease-time 7200; ddns-update-style none; authoritative; subnet 10.10.0.0 netmask 255.255.255.0 { range 10.10.0.30 10.10.0.199; option routers 10.10.0.1; option domain-name-servers 1.1.1.1, 8.8.8.8; default-lease-time 3600; max-lease-time 7200; }
radvdの設定
/etc/radvd.conf
を以下の内容で作成。
interface eth1 { AdvCurHopLimit 64; AdvLinkMTU 1500; AdvManagedFlag off; AdvOtherConfigFlag off; AdvReachableTime 0; AdvRetransTimer 0; AdvSendAdvert on; MaxRtrAdvInterval 600; prefix 240b:xxxx:xxxx:xxxx::/64 { AdvAutonomous on; AdvOnLink on; AdvValidLifetime 2592000; }; RDNSS 2606:4700:4700::1111 2001:4860:4860::8888 { }; };
$ sudo apt install radvd
ndppdの設定
/etc/ndppd.conf
を以下の内容で作成。
proxy eth0 { router no timeout 500 autowire yes keepalive yes retries 3 ttl 30000 240b:xxxx:xxxx:xxxx::/64 { iface eth1 } }
$ sudo apt install ndppd
$ sudo systemctl enable ndppd.service
ここで再起動する
速度計測
十分に速くなった!