Skip to content

Latest commit

 

History

History
98 lines (74 loc) · 8.11 KB

router.md

File metadata and controls

98 lines (74 loc) · 8.11 KB

家のルーター

ルーターには API が無いので、設定はここに書いて持つ(IaC にはできない)。これまで decisions.md・apps/matrix/README.md・ docs/talos.md に散らばっていたものを 1 つにまとめた(2026-10-07)。ルーターの設定を変えたら、ここも直す。

値は 2026-10-07 に管理画面(クイック設定Web)とノードで読んだもの。

機器

項目 値
機種 au ひかりのホームゲートウェイ BL1500HM(KDDI。管理画面の「クイック設定Web」のページから。2026-10-07)
管理画面 http://10.0.0.1/(クイック設定Web。ログインが要る)
回線 au ひかり(接続はホームゲートウェイが持つ。IPv6 はネイティブで RA が来る)
外向きの IPv4 固定ではない。cloudflare-ddns が doany.io と nb.origin.doany.io を追従させる(apps/cloudflare-ddns/)
IPv6 プレフィックス 240f:6d:842b:1::/64(RA で配られる。変わりうるので、どこにも固定で書かない)
IPv6 の受信 「IPv6ホスト公開」の既定は**「遮断」**で、ノードだけをエントリで公開(MAC e6:2c:1b:1a:a0:39、IPv6 すべて、ポート any)。2026-10-07 に「公開」(全端末)から変えた(下の「IPv6 はノードだけを公開する」)。IPv6 パケットフィルターは有効で、WAN 側の規則は 0 件

LAN

項目 値
LAN 10.0.0.0/24、ルーターは 10.0.0.1
ノード main 10.0.0.2(bond0)、240f:6d:842b:1::2。ノード側の静的設定(talos/patches/cluster.yaml。DHCP は使わない。既定経路は 10.0.0.1、IPv6 は RA を受ける)
別の LAN 10.10.0.0/24(ゲートウェイ 10.10.0.1)。ノードの eno4 が 10.10.0.4(静的。既定経路には使わない)
DHCP ルーターが配る。10.0.0.10 から 128 個、リース 24 時間。固定割り当て・除外は 0 件。DHCPv6 のアドレス割り当ては自動
DNS ルーターの DHCP には DNS の欄が無い(配るのはルーター自身の 10.0.0.1)。AdGuard Home を使うのは、端末側で指定したものと、NetBird の端末(NetBird の DNS 設定で AdGuard を引く。pulumi/netbird.ts)

外からの転送

DMZ(すべての受信)をノード 10.0.0.2 に向けている(「DMZホスト設定」。ポートマッピングは 0 件)。個別のポート転送ではないので、ノードで受けているものは全部外に出る。 DMZ の向け先を変えると、下の全部と AdGuard の split-horizon が一斉に外れる(decisions.md「LoadBalancer をどう置き換えるか」)。

ノードで受けているもの(hostPort。増やすと、それも外に出る):

ポート 何 外から要るか
80 / 443 TCP Gateway(全部の Web) 要る
53 UDP・TCP / 853 TCP AdGuard Home(DNS / DoT) 開けている(下の「53 番は外にも開けている」)
8443 UDP・TCP LiveKit(Matrix の通話。apps/matrix/README.md) 要る
3478 UDP NetBird の STUN(apps/netbird/) 要る
51820 UDP NetBird の routing peer(WireGuard) 要る
3129 TCP 3proxy の TLS 口(apps/3proxy/) 外から使うなら要る
6443 TCP Kubernetes の API(ks.doany.io:6443。recovery/README.md) 要る(認証つき)

Talos の API(50000)は LAN からしか届かない(recovery/README.md)。

53 番は外にも開けている(意図して)

AdGuard Home は問い合わせ元を絞っておらず(apps/adguardhome/config.yaml の allowed_clients: [])、DMZ で 53 番も外に出ている。 意図してそうしている(2026-10-07 に確認)。オープンリゾルバとして DNS の増幅攻撃の踏み台に使われうることは承知の上。 閉じるときは、ルーターで 53 番の受信を止めるか、allowed_clients に家の LAN・Pod・NetBird の範囲だけを書く。

IPv6 はノードだけを公開する

「IPv6ホスト公開設定」の既定を「遮断」にし、ノード main だけをエントリで公開している(2026-10-07。それまでは既定が「公開」で、 LAN の全端末に外から IPv6 で直接届いていた)。

  • エントリは MAC アドレスで指す(bond0 の e6:2c:1b:1a:a0:39。talosctl -n 10.0.0.2 get links bond0 で見る。ルーターの「接続端末 情報画面」にも同じ値が出る)。IPv6 アドレスで指すと、RA のプレフィックスが変わったときに外れる
  • この MAC はノードの設定で固定している(talos/patches/cluster.yaml の BondConfig の hardwareAddr)。固定していなかった頃は 再起動で 3a:43:95:a9:3e:b1 に変わってエントリが外れた。NIC を替えても Z440 に移しても、この値は変わらない
  • 公開する AAAA は静的な ::2。 cloudflare-ddns の local.iface.stable:bond0 は一時アドレス以外から選ぶので、SLAAC のアドレスがあると そちらを書いてしまう。bond0 は autoconf=0(talos/patches/cluster.yaml)で SLAAC を付けない
  • 公開の中身は DMZ と同じ(IPv6 すべて・ポート any)。ノードで受けているものは IPv6 でも全部外に出る
  • fj / nb / m / ks / lk などの AAAA はノード(240f:6d:842b:1::2)を指すので、このエントリを消すと IPv6 の利用者から直接つなぐアプリが見えなくなる
  • 確かめ方: 別の回線の IPv6 から名前で開く(アドレス直打ちは SNI が無く Gateway が切る)。J:COM 側の PC から curl -6 -so /dev/null -w "%{http_code} %{remote_ip}\n" https://fj.doany.io/ で 200 240f:6d:842b:1::2
  • ノードの設定で bond0 の MAC を変えたら、エントリも直す

ヘアピン NAT(NAT ループバック)

有効にしておくこと。 家の中の端末も、LiveKit や NetBird が STUN で調べた外の IP に向けて送る。 無効だと家の中からだけ通話がつながらない(apps/matrix/README.md「ルーターの転送」)。 Web も、AdGuard を使う端末(端末側で指定したもの・NetBird の端末)は split-horizon で 10.0.0.2 を引くのでヘアピンに頼らないが、ルーターの DNS のままの端末は外の IP を引くので、Web もヘアピン頼み。

作り直す・機種を替えるとき

  1. LAN を 10.0.0.0/24、ルーターを 10.0.0.1 にする。DHCP の範囲は 10.0.0.10 から(ノードの .2 に被らないこと)
  2. ノードを 10.0.0.2 にする
  3. DMZ を 10.0.0.2 に向ける
  4. ヘアピン NAT を有効にする
  5. IPv6 ホスト公開の既定を「遮断」にし、ノードの MAC だけをエントリで公開する(上の「IPv6 はノードだけを公開する」)
  6. 外から確かめる: https://doany.io、Element の通話、NetBird の接続

10.10 側(JCOM)のルーター

10.10.0.0/24 は別の回線(J:COM)。分かっていること(2026-10-11):

機種 HUMAX HGJ310V4(ケーブルモデム一体。Plume / OpenSync で管理される機種)
設定 Web の画面(http://10.10.0.1)は見るだけ。IP の予約やポート転送は J:COM のアプリから(「設定 → ネットワーク → IP 予約」で端末を選び、その中で転送を足す)。静的ルートの設定は無い
IP 固定 IP の契約(IPv4 61.21.173.41、IPv6 プレフィックス 2405:1201:5201:3a00::/64)。ルーターの画面の「WAN タイプ: 動的 IP」は契約に関係なくこう出る
IPv6 外からの接続を何も止めない。 au 側の main から、この LAN の PC の IPv6 に TCP でつながった。守っているのは各機器のファイアウォールだけ
Guard アプリの「Remote Access Protection」は無効にしておく(有効だと、転送したポートも許可するまで止まる)

アプリで 10.10.0.2(OD00)を予約し、TCP 80 / 443 をそこへ転送している。 main が落ちたときの入口の mado(md.doany.io)のため。同じ日に MeshCentral(mc.doany.io)を試して外し、mado に替えた。