router
Linuxをrouterにする。
ここでは、Ubuntu Linux 20.04をもとに説明します
特に、pppoeの接続を他のマシンでも使えるという設定の例です
以下の具体的なコードと設定の例では、eth deviceが以下の具体値になっているので留意ください。
enp4s0
: intranet, LAN側のeth deviceenx3495db2d875c
: internet, WAN側のeth device
netplanでIPの設定
/etc/netplan/01-netcfg.yaml
などを編集して以下の設定を反映させる
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
enp4s0:
dhcp4: no
dhcp6: true
addresses: [192.168.50.1/24, 192.168.40.12/24, 192.168.30.12/24, 192.168.20.12/24]
routes:
- to: 0.0.0.0/0
via: 192.168.40.1
metric: 100
- to: 0.0.0.0/0
via: 192.168.30.1
metric: 120
nameservers:
addresses: [1.1.1.1, "2606:4700:4700::1111","2606:4700:4700::1001",8.8.4.4,8.8.8.8]
enx3495db2d875c:
dhcp4: true
dhcp6: true
dhcpdを起動
$ sudo apt install isc-dhcp-server -y
以上のパッケージを入れて、設定ファイルに以下のようなレンジを書き込む
- 設定ファイル :
/etc/dhcp/dhcpd.conf
このファイルは systemctl restart isc-dhcp-server
で再起動できるが、 netplan
で適切にどちらのインターフェースがこれに該当するか設定しないと起動できない
option domain-name-servers 8.8.8.8, 8.8.8.4;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.50.255;
subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.20 192.168.50.250;
option routers 192.168.50.1;
}
pppoeconfでauthを通す
例えば以下のように、ユーザ名やなんやらを通す
$ pppoeconf enx3495db2d875c
二度目以降は、以下のコマンドですぐ接続できる
$ pon dsl-provider
注意点として、device指定がpppoeconfパッケージは壊れているので、手動で以下のファイルを下記のように設定し直す必要がある。
- /etc/ppp/peers/dsl-provider
# Minimalistic default options file for DSL/PPPoE connections
noipdefault
# defaultroute
# replacedefaultroute
hide-password
# lcp-echo-interval 30
# lcp-echo-failure 4
noauth
persist
# mtu 1492
# persist
# maxfail 0
# holdoff 20
plugin rp-pppoe.so enx3495db2d875c
# usepeerdns enx3495db2d875c
user "zed842793@excite.co.jp"
テキスト形式のPPPDの設定はこのwikiが参考になる
ipforwardingを有効化
/etc/sysctl.conf
にipv4のforwardingは以下のように設定する
net.ipv4.ip_forward=1
システムに反映する
$ sudo sysctl -p
eth device間のiptableを設定
IPをどういうルールで転送するか、の設定を覚えさせる必要がある。
DEV_IN
は intranet側、 DEV_EX
はwan(internet)側である。
#!/bin/bash
# /etc/rc.local
# Default policy to drop all incoming packets.
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
export DEV_IN="enp4s0"
export DEV_EX="ppp0"
echo "DEV_IN ${DEV_IN}"
echo "DEV_EX ${DEV_EX}"
# Accept incoming packets from localhost and the LAN interface.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $DEV_IN -j ACCEPT
# Accept incoming packets from the WAN if the router initiated the connection.
iptables -A INPUT -i $DEV_EX -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT
# Forward LAN packets to the WAN.
iptables -A FORWARD -i $DEV_IN -o $DEV_EX -j ACCEPT
# Forward WAN packets to the LAN if the LAN initiated the connection.
iptables -A FORWARD -o $DEV_IN -i $DEV_EX -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT
# NAT traffic going out the WAN interface.
iptables -t nat -A POSTROUTING -o $DEV_EX -j MASQUERADE
# rc.local needs to exit with 0
exit 0
V2: ds-lite形式でIPIP6する
詳細はこのリンクを参照すればよい。
Ubuntu18.04以降ではnetplanのみでトンネリングできるが、 dhcpサーバと、他のマシンにipをフォワードするには別途設定が必要である
ds-lite契約をしていると勝手にIPv6アドレスが降ってくるので、そのIPアドレスをNTT東日本のpeerにトンネルを構築して底経由で通信すれば高速。
network:
ethernets:
enp9s0:
addresses:
- 192.168.20.23/24
- 192.168.30.23/24
- 192.168.40.23/24
- 192.168.45.23/24
- 192.168.45.1/24
- 192.168.50.23/24
- 192.168.60.23/24
dhcp4: false
dhcp6: true
#gateway4: 192.168.40.1
routes:
- to: 0.0.0.0/0
via: 192.168.60.1
metric: 1000
- to: 0.0.0.0/0
via: 192.168.50.1
metric: 80
- to: 0.0.0.0/0
via: 192.168.45.1
metric: 10
- to: 0.0.0.0/0
via: 192.168.40.1
metric: 10
- to: 0.0.0.0/0
via: 192.168.30.1
metric: 50
- to: 0.0.0.0/0
via: 192.168.20.1
metric: 120
nameservers:
addresses: [127.0.0.53]
enx000ec6fa667a:
dhcp6: yes
accept-ra: yes
tunnels:
ip6tnl1:
mode: ipip6
remote: 2404:8e00::feed:100
local: 2409:10:8b00:4900:20e:c6ff:fefa:667a
routes:
- to: 0.0.0.0/0
scope: link
renderer: networkd
version: 2
これを反映すると、 ip a
で以下のような状態を確認できるはずである
$ ip a
...
9: ip6tnl1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN group default qlen 1000
link/tunnel6 2409:10:8b00:4900:20e:c6ff:fefa:667a peer 2404:8e00::feed:100
inet6 fe80::8463:5dff:fe05:c8dc/64 scope link
valid_lft forever preferred_lft forever
ip route
で最優先のrouteがトンネルになっていれば、無事ここ経由ですべて通信できる
default routeから消して接続を切断する
$ sudo ip route del default dev ip6tnl1