ラズパイをルーター化する(NAT超えWake on LAN[4])


はじめに

前回の続きです.
とりあえずやりたいことはこんなんです.

今回は「ラズパイをルーター化する」です.

有線LANアダプタを買う

ラズパイには,LANポートは1つしかないので,有線LANアダプタを書います.こんなやつ

新しいEthernetに固定IPアドレスを割り当てる

ip aコマンド(sudo ifconfig)で確認すると新たなEthernet Ineterfaceが追加されているはずです.今回はeth1という名前でした.

$ sudo ifconfig # ip a の方がいいっぽいです
eth1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 04:ab:18:3b:af:e2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

固定IPを割り当てます.今回は,下図のようにラズパイをルーター※として,新たなネットワーク(192.168.1.0/24)を作りたいので,

sudo vi /etc/dhcpcd.conf

以下を追記します.

/etc/dhcpcd.conf
# External ethernet
interface eth1
static ip_address=192.168.1.1/24 # you can assign arbitrary ip address and subnet mask. Note that client must designate this address as gateway
static routers=**.**.**.** # you can assign arbitrary ip too. if this server's network is from another router, set routers address may be better.(you will not need to set dns masquerade)
static domain_name_servers=8.8.8.8 # see above line's comment

※ルーター化と言っていましたが,実はIPマスカレードするだけでした.
↑の**.**.**.**にルーターのアドレス,dnsアドレスにGoogleのPublicアドレスを入れています.(もはやルーターではないかもしれませんね...詳しくないのでわかりません笑)
※ラズパイに完全にルーター機能を付与する場合は**.**.**.**にも任意のアドレスを割り当て,dnsアドレスはコメントアウトすべき?.そして,参考にあるようにDNSマスカレードとDHCPサーバーの設定を行うといいのですかね...

確認

ラズパイに繋いだデスクトップPCの電源を入れて,ipを確認すると,eth1にIPが割り当てられます.
※デスクトップPCはまだインターネットに繋がりません.

sudo ifconfig # or ip a
# eth1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
#         inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
#         ether **:**:**:**:**:**  txqueuelen 1000  (Ethernet)
#         RX packets 0  bytes 0 (0.0 B)
#         RX errors 0  dropped 0  overruns 0  frame 0
#         TX packets 0  bytes 0 (0.0 B)
#         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ping 192.168.1.**

IPマスカレードの設定

IPマスカレードの設定をします.
1行目:プライベートIPアドレス空間から-oへの転送許可.
2行目:SNAT.
3行目:DNAT.

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT # SNAT
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # DNAT

このままだと一時的で,再起動すると情報が消えてしまうので,

mkdir ~/iptable && cd ~/iptable
sudo iptables-save > iptables.dat
sudo vi /etc/rc.local 
/etc/rc.local
# iptables
iptables-restore < /home/{user name}/iptable/iptables.dat

これで,デスクトップPCがインターネットに繋がるはずです.

参考

Ubuntu 16.04 でルータつくる
Ubuntu 18.04LTS で NAT ルータを構築
Linuxマシンをルータにする方法
手元のUbuntuにUSB-LANアダプタを追加してルータ化する
Ubuntu PCをルータ代わりにして、新しくLANを構築してみる
How to Setup a Raspberry Pi DNS Server
Raspberry PiにDnsmasqをインストールする