BobbyQuineのブログ(備忘録)

Linux関係の備忘録、その他タバコ、Vape関連なんかも。

Raspberry Pi OSにてNATやる備忘録

動機


RasPi4にArch Linux for ARM入れてNAT組んでとかやっていたが,アップデートかませてから動かなくなった.おそらくSDカードの寿命.

せっかくなのでRaspberry Pi純正OSのRaspberry Pi OSにて同様の動作をする環境を作りたかった.


目標の構成としてはNATの上流側がWi-Fi環境であり下流が優先LANである.

逆に設定するのが通常であると考えられるが,私は家のDHCPによるIP自動払い出しのWi-Fiにしか接続できない環境にあり,一方で自室内に自分専用のネットワークを組みたいという欲望からこのようなことが必要になる.

 

 

作業環境


既に有線回線側の接続予定のローカルネットワークは組まれていてその中には外部との接続を可能にするためのNATが組まれたPCがあり,DHCPサーバよりルーティングも可能になっている状況にある.

すなわち今回の作業で得たい環境はすでに別機器によって再現されている環境にある.

 


SDカードへのRaspberry Pi OSのインストール

 


Raspberry Pi Imagerを用いてRaspberry Pi OS Lite(64bit)をSDカードに焼きこむ.


この際ssh設定とユーザー名&パスワード設定を必ずチェックボックスを入れて設定する.

 

 

Raspberry Piの起動


SDカードをRaspberry Piに差し込み,有線LANを接続する.Raspberry PiにはPoE hatが接続されており,接続先のスイッチもPoE出力のある物なので自動的に起動する.


DHCPの払い出しにより自動的にIPアドレスが割り振られ,sshで接続できるようになっているはずである.sshRaspberry Piに接続する.

 

 

systemd-networkd


まず有線側を固定IPとして設定する.


$ sudo vim /etc/systemd/network/20-wired.network


[Match]


Name=eth0


[Network]


Address=10.0.2.5


[DHCPv4]


RouteMetric=20

 

 

次に無線側をDHCPとして設定する.


$ sudo vim /etc/systemd/network/25-wireless.network


[Match]

Name=wlan0

[Network]

DHCP=yes


IgnoreCarrierLoss=3s


[DHCPv4]

RouteMetric=10

 


systemd-networkdの自動起動とdhcpcdの自動起動停止


$ sudo systemctl disable dhcpcd


$ sudo systemctl enable systemd-networkd

 

 

再起動


$ sudo reboot

 

 

ここまでできていれば再起動後も同様にssh接続できるはず.


再度ssh接続した後,ルーティングは自動的に設定されないため


$ sudo ip route add default via $ROUTING_ADDR dev eth0


ここで$ROUTING_ADDRはデフォゲのアドレス.一時的なもの.

 

 

Wi-Fi側の接続


iwdを用いる


$ sudo apt install iwd


$ sudo systemctl disable wpa_supplicant.service


$ rfkill unblock wifi

$ reboot


$ sudo systemctl start iwd


$ sudo systemctl enable iwd


$ sudo iwctl


[iwd] station wlan0 connect SSID

 

 

ここでWi-Fiパスワードをうち,その後quitでiwdの対話から抜ければWi-Fi側(今回の場合は上流)にも接続できる.

 


ipフォワーディング

$ sudo vim /etc/sysctl.d/30-ipforward.conf


net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

 


iptablesによるNAT関係


$ sudo apt install iptables


$ sudo apt install iptables-persistent

$ sudo systemctl enable iptables


$ sudo systemctl start iptables


$ sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o wlan0 -j MASQUERADE
$ sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

 

$ vim test.sh

#!/bin/bash

iptables-save > /etc/iptables/rules.v4


$ sudo chmod a+x test.sh

$ bash ./test.sh

$ sudo reboot

 

DHCPサーバ

$ sudo apt install sci-dhcp-server

 

DHCPサーバの設定

$ vim /etc/dhcp/dhcpd.conf

設定内容は割愛

 

同一LAN内で動作しているdhcpサーバを落として

$ sudo systemctl enable sci-dhcp-server

$ sudo systemctl start sci-dhcp-server

 

今回の学び

iptablesの設定ファイルはArch Linuxでは/etc/iptables/iptables.rulesであるが,Raspberry Pi OSでは/etc/iptables/rules.v4となる.

また,aptではiptablesのみでは動かない,iptables-persistentも同時に入れる.

pacman上でのパッケージdhcpdはapt上ではisc-dhcp-server,同様にsystemdにて起動するサービスもisc-dhcp-server.service