自宅ネットワーク構築備忘録
前提
投稿者はネットワーク知識が乏しいため、以下の内容はあくまで個人の備忘録です。
目的
自宅環境でDHCPのIP制限を回避し、複数の機器を安定して接続するためのネットワーク構築。
構成
サーバA (ホストOS) を中心に、サーバBとサーバCを接続。サーバAはカーネル機能によるルーティングを利用し、外部ネットワークへの接続を実現。
なので、DHCPからのIP割り当てはサーバAに限定され、他のサーバは静的IPを使用。
上記の外部ネットワーク接続以外に、内部のみの管理ネットワークも構成。
使った機材
マネージドスイッチ: NETGEAR GS308Ev4 VLAN機能があればいい。今後のためにsnmpも使えるものと交換する予定。
サーバ: N100のミニPCを3台使用。ホストOSはUbuntu Server 24.04 LTS。
手順概要
- マネージドスイッチのVLAN設定をサーバA対向とルータ対向ポートで行う
- サーバAに仮想IFを設定し、VLANIFを作成、IPアドレスを割り当てる。
- サーバBとサーバCに仮想IFとVLANIF、IPを設定し、サーバAをデフォルトゲートウェイとして指定。
- マネージドスイッチのVLAN設定をサーバA、サーバB、サーバCのポートに適用。
- 各サーバから、外部の接続、および管理ネットワークへの接続を確認。
ルーティング用のサーバ以外のおおよその設定
# NetworkManager導入
sudo apt update
sudo apt install network-manager
# 仮想IFの設定
sudo nmcli con add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method ignore
# 物理IFをブリッジに追加
sudo nmcli con add type bridge-slave con-name <物理IF名>-slave ifname <物理IF名> master br0
# VLAN設定
# VLAN AはgwとしてサーバAを指定
sudo nmcli con add type vlan con-name vlan<A> ifname br0.<A> dev br0 id 2 ip4 172.a.b.x/24 gw4 172.a.b.1
sudo nmcli con add type vlan con-name vlan<B> ifname br0.<B> dev br0 id 3 ip4 172.c.d.f/24
# IFの順次起動
sudo nmcli con down br0
sudo nmcli con down <物理IF名>-slave
sudo nmcli con up br0
sudo nmcli con up <物理IF名>-slave
sudo nmcli con up vlan<A>
sudo nmcli con up vlan<B>
サーバAの設定
ルーティング設定のため、上記のIF設定に加えて
# ルーティング機能有効化
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# NAT設定(VLAN Aセグメントから外部への通信をNAT)
# br0は外部ネットワークに接続されている仮想IF
sudo iptables -t nat -A POSTROUTING -s 172.a.b.0/24 -o br0 -j MASQUERADE
# iptables永続化
sudo apt install iptables-persistent
sudo netfilter-persistent save
穴にはまったところ
物理IFにVLAN設定ができない
nmcliで物理IFに対してVLAN設定を行ったら、下記のエラーが発生
$ sudo nmcli con up vlan<A>
Error: Connection activation failed: Failed to find a compatible device for this connection
物理IFをnmcliで再作成してもうまくいかず。
なので今回は仮想IF(br)を作成して、そこにVLANを設定する方法に変更。
トランクポートの理解の誤り
NETGEARのポートにVLAN AとVLAN Bを設定する必要があったのでトランクで設定していた。
ルータ側のポートはアクセスVLANを設定していて、サーバAのポートはトランクVLANですべてのVLANを許可していた。
しかし、サーバAからルータに対してパケットが飛ばず、外部ネットワークに接続できなかった。
トランクポートはVLANタグ付きのパケットしか別のVLANに転送せず、タグなしパケット(通常の外部向け通信)はネイティブVLANにしか転送しないからなのかな。
てっきりトランクポートが外部向けパケットもよしなに処理してくれると思っていたが、そうではなかった。外部向けのパケットはすべてアクセスVLANと同じVLAN IDで飛ぶと思ったが、そうではなかった。
一応、NETGEARのVLAN機能である拡張ポートベースVLANを使用して、サーバAのポートにネイティブVLANとVLAN A,Bを設定することで解決。これにより、タグ付きパケットはVLAN別に、タグなしパケットは外部向けに適切に転送されるようになった。
まとめ
実際にルーティングであったり、サーバのVLAN設定を行うのは初めてだったがうまくできた。
FRRなどのルーティングソフトを使うのかと考えていたが、標準搭載機能でなんとかなってよかった。
次はどこかのサーバでVMからzabbixを動かして、SNMPを使ったネットワークの監視やHTTPSの通信などを行ってみたい。