Ubuntu 20.04でIPoE + v6プラス固定IPルータをつくる

blog.akashisn.info

Edgerouterではなぜかhwnatを有効化するとipipトンネルがおかしくなるみたいでhardware offloadを無効化していたのだが、やはりCPU性能がボトルネックになっていたのでノートパソコン(XPS13)でルータを作ってみた。

前回の記事での「RA Prefixの取得」を行って、

$ sudo apt install radvdump
  • 隣ルータのリンクローカルアドレス : fe80::xxxx:xxxx:xxxx:xxxx
  • IPv6 Prefix : 240b:xxxx:xxxx:xxxx::/64

を取得しているものとする。

環境

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_POLICYACCEPTにする。

# 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

ここで再起動する

速度計測

f:id:akashisn:20220311172504p:plain

f:id:akashisn:20220311172523p:plain

十分に速くなった!