Rsapberry Pi 4で作るルータ

# なんで作ったの
自宅のアパートのISPから「オメーの部屋の接続台数へらせーや、他の部屋の連中の接続速度が落ちてるんじゃ」
と怒られたので仮想化基盤のサーバ群と通常のPCやスマフォなどの接続を分離したくてやってみた

# 参考にしたサイトの手順と違うとこ
今回参考にしたサイトと違う部分はUSB-NICを追加して追加したNICはLocal側とする部分と
WiFIに関しては設定自体は投入し実際には電波を発射しないで置く部分

# WiFiの仮想デバイス追加
iw devコマンドでRaspberry PiのWiFIのMACアドレスを確認し、addrの箇所を控えておく
```
root@raspberrypi:~ # iw dev
phy#0
        Unnamed/non-netdev interface
                wdev 0x2
                addr da:3a:dd:0a:96:c1
                type P2P-device
        Interface wlan0
                ifindex 4
                wdev 0x1
                addr d8:3a:dd:0a:96:c1
                type managed
                channel 34 (5170 MHz), width: 20 MHz, center1: 5170 MHz
root@raspberrypi:~ # 
```

仮想WiFIのデバイスを追加していく
```
iw phy phy0 interface add ap0 type __ap
ip link set ap0 address d8:3a:dd:0a:96:c1
```

再度iw devコマンドで追加されていることを確認する
```
root@raspberrypi:~ # iw dev
phy#0
        Interface ap0
                ifindex 5
                wdev 0x3
                addr d8:3a:dd:0a:96:c1
                type AP
                channel 34 (5170 MHz), width: 20 MHz, center1: 5170 MHz
        Unnamed/non-netdev interface
                wdev 0x2
                addr da:3a:dd:0a:96:c1
                type P2P-device
        Interface wlan0
                ifindex 4
                wdev 0x1
                addr d8:3a:dd:0a:96:c1
                type managed
                channel 34 (5170 MHz), width: 20 MHz, center1: 5170 MHz
root@raspberrypi:~ # 
```
このままでは再起動を行うと追加した仮想WiFiデバイスが削除されてしまうため
udevを使用して再起動しても仮想WiFiデバイスを作成されるように設定ファイルを作成する。
なお、MACアドレスを指定している箇所は使用しているRaspberry PiのWiFIのMACアドレスにすること
```
vim /etc/udev/rules.d/99-ap0.rules

SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="d8:3a:dd:0a:96:c1", KERNEL=="phy0", \
  RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
  RUN+="/bin/ip link set ap0 address d8:3a:dd:0a:96:c1"
```

# 必要なパッケージのインストールとDHCP関連の設定
hostapdとdnsmasqをインストールする。
インストール後にDHCPサーバの設定を行う前にRaspberry PiのLANのIPアドレスの固定設定をしておく。
実施後dnsmasqの設定を行う。

なお、IPのレンジについてはUSBNICと分けているが好みの問題だと思われるので好きに設定する

```
# DHCPサーバ設定(dnsmasq)

vim /etc/dnsmasq.conf

# eth1設定(USBNIC)
# IPのレンジ 192.168.0.10 ～ 192.168.0.110
# サブネット 255.255.255.0 (/24)
interface=eth1
dhcp-range=192.168.0.10,192.168.0.110,255.255.255.0,12h

# ap0設定(WiFIの設定だがほぼダミー設定)
# IPのレンジ 192.168.10.10 ～ 192.168.10.110
# サブネット 255.255.255.0 (/24)
interface=ap0
dhcp-range=192.168.10.10,192.168.10.110,255.255.255.0,12h

```

次にDHCPクライアントの設定を行う
```
vim /etc/dhcpcd.conf
# DHCPクライアント設定 eth1
# 効くかわからないが念のためnohook wpa_supplicantのオプションは入れておく
# 念のためIPv6の拒否設定も入れておく
# eth1のIPは192.168.0.1/24

interface eth1
static ip_address=192.168.0.1/24
nohook wpa_supplicant
noipv6

# DHCPクライアント設定 Wi-Fi
# ap0のIPは192.168.10.1/24
# こっちにもIPv6拒否設定入れておく

interface ap0
static ip_address=192.168.10.1/24
nohook wpa_supplicant
noipv6
```
hostapdの設定もしていくが、ほぼほぼダミー設定のため念のため入れる
```
# hostapdの設定は基本こっちもダミー設定に近い
vim /etc/hostapd/hostapd.conf

ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=ap0
driver=nl80211
ssid=rolly
hw_mode=g
country_code=JP
channel=11
ieee80211d=1
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=P@ssW0rd
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
```
hostapdの自動起動設定をいれておく
```
systemctl unmask hostapd.service
systemctl enable hostapd.service
```

WiFiも使う場合は以下のコマンドで有効化する
```
# wifi有効化
rfkill unblock wifi

# wifi無効化
rfkill block wifi
```
各サービスを再起動しておく
```
systemctl restart dhcpcd.service
systemctl restart hostapd.service
systemctl restart dnsmasq.service
```
USBNICとスイッチングハブを接続しUSBNIC配下のデバイスに設定したレンジのIPが割り振られているか確認する
```
root@raspberrypi:~ # arp -av
? (10.23.62.209) at 1c:98:ec:0f:d7:64 [ether] on eth0
? (10.23.62.1) at 00:80:6d:8f:ab:50 [ether] on eth0
? (10.23.62.66) at 30:9c:23:99:b7:48 [ether] on eth0
DAIV-DGZ520M4-SH2-DGP (192.168.0.77) at 00:e0:4c:68:01:c6 [ether] on eth1
ILO6CU6445M9H (192.168.0.15) at 1c:98:ec:0f:d7:66 [ether] on eth1
storageserver (192.168.0.13) at 1c:98:ec:0f:d7:65 [ether] on eth1
エントリ: 6     スキップ: 0     発見: 6
root@raspberrypi:~ # 
```

# ポートフォワーディング設定
ポートフォワーディング設定を行い,再起動しても行うように設定する
```
root@raspberrypi:~ # sysctl -w net.ipv4.ip_forward=1
root@raspberrypi:~ # echo net.ipv4.ip_forward=1 > /etc/sysctl.d/routed-ap.conf
root@raspberrypi:~ # 
root@raspberrypi:~ # cat /etc/sysctl.d/routed-ap.conf
net.ipv4.ip_forward=1
root@raspberrypi:~ # 
```

IPマスカレード設定を入れる
IPのレンジ分の設定を設定すること
```
# iptables設定
# eth1とap0でIPの設定を変更しているのでそれに合わせる
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE
```
netfilter-persistentをインストールしてiptablesの設定を保存する。
```
apt install netfilter-persistent iptables-persistent

root@raspberrypi:~ # netfilter-persistent save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
root@raspberrypi:~ # 
```

設定後ip aでIPが割り当たっているか確認し各サービスが再起動後も起動するようになっているか確認する
```
root@raspberrypi:~ # systemctl is-enabled dhcpcd.service
enabled
root@raspberrypi:~ # systemctl is-enabled hostapd.service
enabled
root@raspberrypi:~ # systemctl is-enabled dnsmasq.service
enabled
root@raspberrypi:~ #
```

今回設定した箇所でエラーになっている箇所がないか確認する
```
systemctl status dhcpcd.service
systemctl status hostapd.service
systemctl status dnsmasq.service
```

# 設定後の確認
USBNICとスイッチングハブを接続その配下に適当なPCを接続して、ネットにアクセスできることを確認する
Raspberry Piを再起動し、再度ネットにアクセスできるか確認し完了

# 参考にしたサイト
https://www.mikan-tech.net/entry/raspi-wifi-ap-sta
https://www.mikan-tech.net/entry/raspi-ap-sta-router