やりたいこと
Raspberry Pi ZeroをIPv4のNATBOXというかイーサネットコンバータというか、そういう感じのアレにしてQoLを上げたい。ただし、やるのはmasqueradeだけでよくて、DHCPとかDNSとかそういうのは別の人がやっているとする。せっかくだから(?)iptablesではなくてnftablesで動かしてみたい。
はまりポイント
- ipv4のip forwardingが初期設定では無効になってるので、nftのmasquarade設定書いてもしれっと無視される
- 無視されるだけでエラーがログにでないので念力でなんとかする必要があった
- nftablesにログとる方法があるっぽいのでそれをやれば見つけられたのかもしれないが、何某かのmodprobeがいるっぽくてぐんにょりしててgoogle先生に頼った
手順
Raspberry Pi Zeroにeth0とwlan0があり、wlan0側がinternetで、eth0からの接続を全部NAPTしてwlan0側に流すと仮定する。
まずnftablesをインストールし、masquerade設定を記述する。
% sudo apt-get install nftables
% sudo vi /etc/nftables.conf
(ファイル終端に以下を追記)
table ip nat {
chain PREROUTING {
type nat hook prerouting priority 0;
}
chain POSTROUTING {
type nat hook postrouting priority 0;
oifname "wlan0" masquerade
}
}
次にipv4のforwardを有効にする設定を記述する。
% sudo vi /etc/sysctl.conf
...
(以下の行をアンコメント)
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
...
最後に、sysctl.confを読み込ませ、nftables.serviceを起動する。
% sudo sysctl -p
% sudo systemctl start nftables.service
素のRaspberry Pi OS 2020 Augで動作確認しましたが、apt-get full-upgradeした後でも動きました(2020/11/24)。
うちの環境
- Raspberry Pi Zero
- Raspberry Pi OS Lite(Buster/2020 Aug)
- Linux raspberrypi 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l GNU/Linux
- USBハブ+EthernetアダプタとWifiドングルが刺さっている
- Wifiドングルの接続先にブロードバンドルータがあって、ブロードバンドルーターのNAPT越しにインターネットに接続されている
- Raspberry Pi OS Lite(Buster/2020 Aug)
- Ethernetアダプタの口につながってるLANのそれぞれの機器からインターネットに接続したい
参考にしたサイト
Raspbianをbuster化したら、iptablesでちょっとだけハマる - Soukaku's HENA-CHOKO Blog
Raspberry pi を NAT ルーター兼 DHCP + DNS サーバーにしたい - 子育てしながらエンジニアしたい
おまけメモ
Wifi設定(平文で書いてるので真似しちゃだめよ)
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
SSID="(SSIDを記載)"
psk="(keyを記載)"
}
network={
...
}
固定IP割り振り設定
...
interface eth0
static ip_address=xxx.xxx.xxx.xxx
...