回線
NURO光のマンションプラン回線が引かれています。下りで最大2.5Gbps出るそうです。個人向けNURO光にはそもそも固定IPプランがありませんし、IPoEでv4はCGNAT配下です。
ONU(HGW)
NURO光では、ZXHN F660PというONU一体型ルータが貸し出されます。ONU単体で貸し出してもらうことはできません。
厄介なことに、我が家のF660Pでは、設定画面中のポートフォワード、DMZ等の項目がグレーアウトしており、特定のポートを狙って開放することが困難です。(ありえない話し❗❗)
そもそもv6にかんするファイアウォール設定が見つからず、v6が守られているかもアヤシイ。
二重ルーター編
こんなデバイスでは心もとないので、ちゃんとしたルータを下に生やします。ですがここで悲しいお知らせ。F660PのLANポートは1000BASE-Tです。つまり1Gbpsしか出ません。実運用で理論値の2.5Gbps出ることはないとは言え、少々微妙な気持ちになります。
敗けたって次はあるということで、NECのIX2215を中古で購入しました。
![[Pasted image 20261018212020.png]]
ネットワーク設計
家庭用デバイスセグメントと、外部公開するサーバーセグメントを切ります。
WAN側
v4については、F660PからDHCPで受けます。 v6についてですが、F660Pは配下のデバイスに/64しか配らないそうです。(ありえない話し❗❗2) 仕方がないのでNDプロキシ構成にします。
interface GigaEthernet0.0
ip address dhcp
ip napt enable
ipv6 enable
ipv6 nd proxy GigaEthernet2:2.0
no shutdown
!
LAN側
ポートベースでVLANを切ります。ポート1, 2, 3, 4を家庭用、ポート5, 6, 7, 8をサーバー側に割り当てます。
device GigaEthernet2
vlan-group 1 port 1 2 3 4
vlan-group 2 port 5 6 7 8
!
家庭側には、192.168.10.0/24を割り当てます。
interface GigaEthernet2:1.0
ip address 192.168.10.1/24
ip dhcp binding home
no shutdown
!
ポイントとして、家庭側ではそもそもv6を有効にしていません。IX側でACLの設定はしていますが、家庭で使うデバイスでv6を使いたいケースがなかったので無効にしています。
また、家庭側には無線APとしてGL-SFT1200をブリッジ接続し、無線デバイスをここにぶら下げます。
![[Pasted image 20261018212121.png]]
サーバー側には、192.168.20.0/24を割り当てます。
interface GigaEthernet2:2.0
ip address 192.168.20.1/24
ip dhcp binding server
ipv6 enable
ipv6 nd ra enable
no shutdown
!
サーバー側ではv6の到達性を確保するため、NDプロキシでRAを受け取ります。
DHCPの設定は以下のとおりです。
ip dhcp profile home
assignable-range 192.168.10.10 192.168.10.100
subnet-mask 255.255.255.0
default-gateway 192.168.10.1
dns-server 192.168.10.1
lease-time 86400
!
ip dhcp profile server
assignable-range 192.168.20.10 192.168.20.100
subnet-mask 255.255.255.0
default-gateway 192.168.20.1
dns-server 192.168.20.1
lease-time 86400
!
サーバー設定
サーバーマシンとして、かつて使用されていたノートPCのバッテリーを抜いたものを使用しています。
サーバーではWireGuardハブやWebサーバー、Immich、メトリクス用のサービス群などが稼働しており、設定はすべてNixOSで宣言的に管理しています。
https://github.com/marukun712/home-infrastructure
v4トンネル
NURO光では、v4はCGNAT配下です。つまり、今の設定のままでは、v6アドレスが使えない環境でmaril.blueにアクセスすることができません。
そこで、ConoHa VPSの一番安いメモリ512MBプランを契約し、WireGuardでサーバーマシンとトンネルを張ります。
[Unit]
Description=Forward packets from VPS to home server
After=network-online.target wg-quick@wg-relay.service
Wants=network-online.target
Requires=wg-quick@wg-relay.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/sysctl -w net.ipv4.ip_forward=1
ExecStart=/usr/sbin/iptables -t nat -A PREROUTING -i ens3 -j DNAT --to-destination "WireGuard IP"
ExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -o wg-relay -j MASQUERADE
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
maril.blueをVPSのグローバルIPに向けることで、v4のみの環境からでも接続できるようになります。
メトリクス
家のネットワーク状態を監視するため、Grafanaダッシュボードを構築しています。
Grafanaにはサーバーマシン、IX2215の状態に加えて、稼働中のWebサービスを外形監視した状態も表示されています。
IX2215側では、SNMP AgentとsFlow Agentを有効にしています。
snmp-agent ip enable
snmp-agent ip community public
snmp-agent ip community ro public
sflow agent ip 192.168.20.1
sflow collector ip 192.168.20.10
外形監視には、GitHub Actionsベースで動くUpptimeを使用しています。
監視結果はリポジトリにJSONとして保存されるため、そのファイルを取得してInfinity Datasourceに渡してやることで可視化することができます。
https://raw.githubusercontent.com/marukun712/status-page/master/history/summary.json