Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 47 additions & 2 deletions .github/workflows/talos-boot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ concurrency:
env:
# 本番と同じアドレス。SLIRP の網をこれに合わせて、machine config の住所は書き換えない
NODE: 10.0.0.2
# 受信の防火壁を「外」から見るための 4 枚目の NIC(CI だけ)。198.51.100.0/24 は文書用でプライベートでない
WAN_NODE: 198.51.100.2
MAC_WAN: 52:54:00:00:00:05
TALOSCONFIG: /tmp/out/talosconfig
KUBECONFIG: /tmp/kubeconfig
# 3 枚の NIC の MAC。名前は maintenance mode で MAC から引く(VM の名前は QEMU の挿し方で変わる)
Expand Down Expand Up @@ -151,12 +154,14 @@ jobs:
-device virtio-scsi-pci,id=scsi0 \
-drive file=/tmp/vm/disk.raw,format=raw,if=none,id=d0,cache=unsafe,discard=unmap \
-device scsi-hd,drive=d0,bus=scsi0.0 \
-netdev "user,id=up,net=10.0.0.0/24,host=10.0.0.1,dhcpstart=$NODE,ipv4=on,ipv6=on,ipv6-net=240f:6d:842b:1::/64,ipv6-host=240f:6d:842b:1::1,hostfwd=tcp:127.0.0.1:50000-$NODE:50000,hostfwd=tcp:127.0.0.1:6443-$NODE:6443,hostfwd=tcp:127.0.0.1:18080-$NODE:80,hostfwd=tcp:127.0.0.1:18443-$NODE:443" \
-netdev "user,id=up,net=10.0.0.0/24,host=10.0.0.1,dhcpstart=$NODE,ipv4=on,ipv6=on,ipv6-net=240f:6d:842b:1::/64,ipv6-host=240f:6d:842b:1::1,hostfwd=tcp:127.0.0.1:50000-$NODE:50000,hostfwd=tcp:127.0.0.1:6443-$NODE:6443,hostfwd=tcp:127.0.0.1:18080-$NODE:80,hostfwd=tcp:127.0.0.1:18443-$NODE:443,hostfwd=tcp:127.0.0.1:20250-$NODE:10250" \
-netdev hubport,id=hub-up,hubid=0,netdev=up \
-netdev hubport,id=hub1,hubid=0 -device virtio-net-pci,netdev=hub1,mac=$MAC_ENO1 \
-netdev hubport,id=hub2,hubid=0 -device virtio-net-pci,netdev=hub2,mac=$MAC_ENO2 \
-netdev user,id=lan10,net=10.10.0.0/24,host=10.10.0.1,ipv6=off,restrict=on \
-device virtio-net-pci,netdev=lan10,mac=$MAC_ENO4 \
-netdev "user,id=wan,net=198.51.100.0/24,host=198.51.100.1,ipv6=off,restrict=on,hostfwd=tcp:127.0.0.1:28443-$WAN_NODE:443,hostfwd=tcp:127.0.0.1:30250-$WAN_NODE:10250" \
-device virtio-net-pci,netdev=wan,mac=$MAC_WAN \
-display none -serial file:/tmp/vm/serial.log \
-daemonize -pidfile /tmp/vm/qemu.pid

Expand All @@ -172,6 +177,21 @@ jobs:
# NIC は MAC で選ぶ(LinkAliasConfig)ので、実機の MAC を VM の MAC に差し替える。sysctl はカーネルの名前で書くので名前も
sed -e "s/30:e1:71:60:fe:a8/$MAC_ENO1/g" -e "s/30:e1:71:60:fe:a9/$MAC_ENO2/g" -e "s/30:e1:71:60:fe:ab/$MAC_ENO4/g" \
-e "s/\beno4\b/$N4/g" /tmp/out/controlplane.yaml > /tmp/vm/controlplane.yaml
# 4 枚目(外の代わり)に住所を付ける。本物の config には無い
cat >> /tmp/vm/controlplane.yaml <<YAML
---
apiVersion: v1alpha1
kind: LinkAliasConfig
name: wan0
selector:
match: mac(link.permanent_addr) == "$MAC_WAN"
---
apiVersion: v1alpha1
kind: LinkConfig
name: wan0
addresses:
- address: $WAN_NODE/24
YAML
talosctl apply-config --insecure -e 127.0.0.1 -n 127.0.0.1 -f /tmp/vm/controlplane.yaml

- name: bootstrap して kubeconfig を取る
Expand Down Expand Up @@ -261,6 +281,24 @@ jobs:
echo "::error::Gateway を通らない(http=$H https=$S。期待は 301 / 200)"
exit 1

- name: 受信の防火壁(外から 443 は通り、10250 は通らない)
timeout-minutes: 3
run: |
set -euo pipefail
fail() { echo "::error::$*"; exit 1; }
code() { curl -s -o /dev/null -w '%{http_code}' --max-time 10 "$@" || true; }
# IPv4 の hostfwd は SLIRP の 10.0.0.1(家の LAN と同じ。private-tcp に当たる)から来る。kubelet は認証無しなら 401
K4=$(code -k https://127.0.0.1:20250/healthz)
echo " LAN から kubelet: $K4"
[ "$K4" = 401 ] || fail "LAN から kubelet(10250)に届かない($K4。期待は 401)"
# 4 枚目の NIC の hostfwd は SLIRP の 198.51.100.1(プライベートでない)から来る。外から来たのと同じ扱いになる
SW=$(code -k --resolve ac.doany.io:28443:127.0.0.1 https://ac.doany.io:28443/)
echo " 外から Gateway: $SW"
[ "$SW" = 200 ] || fail "外から 443 が通らない($SW)"
KW=$(code -k --max-time 5 https://127.0.0.1:30250/healthz)
echo " 外から kubelet: $KW"
[ "$KW" = 000 ] || fail "外から kubelet(10250)に届いた($KW)。防火壁が効いていない"

- name: ディスクとネットワーク
timeout-minutes: 5
run: |
Expand All @@ -278,6 +316,13 @@ jobs:
[ "$GOT" = "$WANT" ] || fail "bond0 の MAC が $GOT(talos.sops.yaml は $WANT)"
echo " bond0 hardwareAddr: $GOT"

# 受信の防火壁(talos.sops.yaml の NetworkDefaultActionConfig)が既定で捨てる形で載っているか。
# 通す側は、ここまでの talosctl(50000)・kubectl(6443)・curl(80 / 443)が SLIRP の 10.0.0.1 から通ったことで見ている
talosctl get nftableschains -o yaml > /tmp/nft.yaml
P=$(yq -r 'select(.metadata.id == "ingress") | .spec.policy' /tmp/nft.yaml)
echo " nftables の ingress の既定: $P"
[ "$(echo "$P" | tr 'A-Z' 'a-z')" = drop ] || { cat /tmp/nft.yaml; fail "ingress の chain が既定で捨てる形(drop)でない"; }

# 以下は forwarding=1 のあとで見ないと意味が無い(talos.sops.yaml の accept_ra)
F=$(talosctl read /proc/sys/net/ipv6/conf/bond0/forwarding)
[ "$F" = 1 ] || fail "bond0 の forwarding が $F。前提が成り立っていない"
Expand Down Expand Up @@ -415,7 +460,7 @@ jobs:
echo "::endgroup::"
echo "::group::talosctl services"; talosctl services; echo "::endgroup::"
echo "::group::talosctl get links / addresses / routes"
talosctl get links; talosctl get addresses; talosctl get routes
talosctl get links; talosctl get addresses; talosctl get routes; talosctl get nftableschains -o yaml
echo "::endgroup::"
echo "::group::talosctl dmesg(末尾)"; talosctl dmesg | tail -300; echo "::endgroup::"
echo "::group::serial(末尾)"; tail -200 /tmp/vm/serial.log; echo "::endgroup::"
Expand Down
1 change: 1 addition & 0 deletions bootstrap/render.sh
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ for n in "kube-apiserver:$K8S" "ghcr.io/siderolabs/kubelet:$K8S" \
'name: cilium' cilium-operator KUBERNETES_SERVICE_PORT 'value: \"7445\"' 'cgroup-root: \"/sys/fs/cgroup\"' \
'kind: GatewayClass' io.cilium/gateway-controller \
'kind: RawVolumeConfig' 'kind: LVMVolumeGroupConfig' 'name: dm_thin_pool' \
'kind: NetworkDefaultActionConfig' 'name: public-tcp' 'name: private-tcp' \
'name: lvm-localpv' lvm-localpv-node lvm-localpv-controller 'storageCapacity: false' 'doany.io/lvm-thinpool: ready' \
'name: storage' 'name: local-path' 'provisioner: local.csi.openebs.io' 'volgroup: data' \
'kind: VolumeSnapshotClass' 'name: lvm-thinpool' \
Expand Down
9 changes: 9 additions & 0 deletions bootstrap/talos.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,15 @@ needle は `render.sh` の末尾の 1 か所だけに置く。
| `talos.sops.yaml` の先頭の Kubernetes の `# version:` | `render.sh` → `apply-config` → `talosctl upgrade-k8s --to <新しい版>` | 無し |
| `talos.sops.yaml` の本文と、`bootstrap/` の残りの全部(`*-values(.sops).yaml`(2 つめのドキュメントの Secret も)・`apiserver-rbac.yaml`・`storage.yaml`) | `render.sh` → `apply-config` → `talosctl upgrade-k8s --to <今の版>`(下の「inlineManifests を直したとき」) | 場合による |

**ネットワークと受信の防火壁(`BondConfig`・`LinkConfig`・`NetworkRuleConfig` など)を変えたら `--mode=try` で当てる。**
間違えると Talos の API ごと届かなくなるが、`try` なら時間内に `--mode=no-reboot` で当て直さないと元に戻る:

```shell
talosctl apply-config --mode=try --timeout 5m -f bootstrap/clusterconfig/controlplane.yaml
# 5 分のうちに確かめる(talosctl get members・kubectl get nodes・外からの Web・DoT・NetBird)。良ければ確定させる
talosctl apply-config --mode=no-reboot -f bootstrap/clusterconfig/controlplane.yaml
```

### inlineManifests を直したとき

**Cilium・OpenEBS LVM(`storage.yaml` も)・`apiserver-rbac.yaml`・ArgoCD・infisical・
Expand Down
155 changes: 155 additions & 0 deletions bootstrap/talos.sops.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -537,6 +537,161 @@ sops:
mac_only_encrypted: true
version: 3.13.3
---
# ホスト(Talos の API・etcd・kubelet・Cilium・Gateway の Envoy など)が受けるものの防火壁(Ingress Firewall)。
# ルーターは DMZ と IPv6 ホスト公開で全部のポートをノードに流すので(../docs/router.md)、外に出すものはここで決める。
# 既定は捨て、下の NetworkRuleConfig に当たるものだけ通す。lo・確立済みの戻り・ICMP / ICMPv6(5 個/秒まで)・
# Pod と Service の網どうしは Talos が自分で通す。効くのはホスト宛て(input)だけで、hostPort は Cilium が Pod へ
# 転送するのでここを通らない(Pod の手前は Cilium のポリシー。53 番は ../apps/adguardhome/network-policy.yaml)。
# 間違えると Talos の API ごと締め出されるので、当てるときは apply-config --mode=try(talos.md「上げ方 / 当て直し方」)。
apiVersion: v1alpha1
kind: NetworkDefaultActionConfig
ingress: block
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy
UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG
ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP
M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX
uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r
encrypted_regex: ^password$
lastmodified: "2026-10-30T16:40:35Z"
mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str]
mac_only_encrypted: true
version: 3.13.3
---
# 外から要るもの(TCP)。ホストが受けるのは 80 / 443(Gateway の Envoy。hostNetwork)と 6443(ks.doany.io と
# cilium-drift.yml)。853(DoT)・3129(3proxy)・8443(LiveKit)は hostPort でここを通らないが、通る形に変わっても
# 落ちないよう書いておく。足すときは ../docs/router.md の表も。
apiVersion: v1alpha1
kind: NetworkRuleConfig
name: public-tcp
portSelector:
ports:
- 80
- 443
- 853
- 3129
- 6443
- 8443
protocol: tcp
ingress:
- subnet: 0.0.0.0/0
- subnet: ::/0
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy
UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG
ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP
M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX
uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r
encrypted_regex: ^password$
lastmodified: "2026-10-30T16:40:35Z"
mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str]
mac_only_encrypted: true
version: 3.13.3
---
# 外から要るもの(UDP)。LiveKit の 8443 と NetBird の routing peer の 51820(どちらも hostPort。上と同じく念のため)。
# STUN は外のもの(Cloudflare)を使うので開けない。
apiVersion: v1alpha1
kind: NetworkRuleConfig
name: public-udp
portSelector:
ports:
- 8443
- 51820
protocol: udp
ingress:
- subnet: 0.0.0.0/0
- subnet: ::/0
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy
UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG
ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP
M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX
uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r
encrypted_regex: ^password$
lastmodified: "2026-10-30T16:40:35Z"
mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str]
mac_only_encrypted: true
version: 3.13.3
---
# プライベートのアドレスからは全部のポート(TCP。UDP は次)。家の LAN(10.0.0.0/24・10.10.0.0/24)・NetBird(100.64.0.0/10)・
# Pod と Service(10.42 / 10.43・fd42 / fd43。10.0.0.0/8 と fc00::/7 に入る)。talosctl(作業用 PC から 10.10.0.4:50000)・
# etcd・kubelet・Cilium(4240・4244・8472・9963・9964)・Pod からの Talos API(k8up)とノードの DNS(169.254.116.108:53)はここ。
# 家の LAN の IPv6 の GUA(RA のプレフィックス。変わりうる)は入れていないので、LAN からは IPv4 で繋ぐ。
# 172.16/12・192.168/16 は使っていないので入れない(使うものだけ。足すなら上の送信元を増やしたとき)。
apiVersion: v1alpha1
kind: NetworkRuleConfig
name: private-tcp
portSelector:
ports:
- 1-65535
protocol: tcp
ingress:
- subnet: 10.0.0.0/8
- subnet: 100.64.0.0/10
- subnet: fc00::/7
- subnet: fe80::/10
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy
UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG
ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP
M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX
uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r
encrypted_regex: ^password$
lastmodified: "2026-10-30T16:40:35Z"
mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str]
mac_only_encrypted: true
version: 3.13.3
---
# 上と同じ送信元から UDP の全部(Cilium の VXLAN 8472、ノードの DNS など)。
apiVersion: v1alpha1
kind: NetworkRuleConfig
name: private-udp
portSelector:
ports:
- 1-65535
protocol: udp
ingress:
- subnet: 10.0.0.0/8
- subnet: 100.64.0.0/10
- subnet: fc00::/7
- subnet: fe80::/10
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy
UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG
ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP
M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX
uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r
encrypted_regex: ^password$
lastmodified: "2026-10-30T16:40:35Z"
mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str]
mac_only_encrypted: true
version: 3.13.3
---
# 外から入る CI(cilium-drift.yml の OIDC トークン)と人(Entra)の認証。権限の中身は apiserver-rbac.yaml。
apiVersion: v1alpha1
kind: KubeAuthenticationConfig
Expand Down
10 changes: 8 additions & 2 deletions docs/router.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,13 @@ DMZ の向け先を変えると、下の全部と AdGuard の split-horizon が
| 3129 TCP | 3proxy の TLS 口(apps/3proxy/) | 外から使うなら要る |
| 6443 TCP | Kubernetes の API(`ks.doany.io:6443`。recovery/README.md) | 要る(認証つき) |

Talos の API(50000)は LAN からしか届かない(recovery/README.md)。
**ノード自身が受けるもの(Talos の API 50000・trustd 50001・etcd・kubelet 10250・Cilium の 4240 / 4244 / 9963 / 9964 など)は、
ノードの受信の防火壁で外から止めている**(`bootstrap/talos.sops.yaml` の `NetworkDefaultActionConfig` と `NetworkRuleConfig`。
2026-10-31 に足すまでは DMZ と IPv6 ホスト公開で外から全部届いていた)。既定は捨て、外から通すのは上の表のポートだけ
(TCP 80・443・853・3129・6443・8443、UDP 8443・51820)、内側のアドレス(LAN と Pod・Service の 10/8・NetBird の 100.64/10・
fc00::/7・fe80::/10)からは全部。効くのはノード宛てだけで、hostPort(53・853・8443・3129・51820)は Cilium が Pod へ転送するので
通らない(なので 53 番は下の Cilium のポリシーで止めている)。表にポートを足すときは `public-tcp` / `public-udp` にも足す。
家の LAN の IPv6 の GUA はプライベートに入れていないので、LAN からノードの管理の口へは IPv4 で繋ぐ。

## 53 番は外に出さない

Expand All @@ -60,7 +66,7 @@ AdGuard の `allowed_clients` で絞らないのは、DoT・DoH にも効いて
再起動で変わってエントリが外れる。NIC を替えても Z440 に移しても、この値は変わらない
- **公開する AAAA は静的な `::2`。** cloudflare-ddns の `local.iface.stable:bond0` は一時アドレス以外から選ぶので、SLAAC のアドレスがあると
そちらを書いてしまう。`bond0` は `autoconf=0`(bootstrap/talos.sops.yaml)で SLAAC を付けない
- 公開の中身は DMZ と同じ(IPv6 すべて・ポート any)。ノードで受けているものは IPv6 でも全部外に出る
- 公開の中身は DMZ と同じ(IPv6 すべて・ポート any)。ノードで受けているものは IPv6 でも外に出る(ノードの管理の口は IPv4 と同じくノードの防火壁が止める。上の「外からの転送」)
- `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`
Expand Down
Loading
Loading