네트워크 다이어그램:Laptop (10.8.0.2) -> (wireguard) -> server A (10.8.0.1, 10.10.0.10) -> server B (10.10.0.20)
Wireguard를 통해 내 노트북(10.8.0.2)을 서버 A(10.8.0.1)에 연결했습니다. 서버 A(10.10.0.10)에는 ping/curl이 가능하지만 다른 서버 B(10.10.0.20)에는 불가능합니다.
내 노트북에서 서버 B를 실행하면 ping 10.10.0.20
서버 A에서 다음을 찾을 수 있습니다.
tcpdump -nn -i wg0
요청이 표시되지만 응답이 없습니다.tcpdump -nn -i enp7s0
요청과 응답을 보여줍니다
그래서문제는 응답이 enp7s0에서 wg0으로 전달되지 않는다는 것입니다.
그런데 왜 안되죠?
이것은 내 iptables 구성입니다.
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o enp7s0 -j MASQUERADE
노트북 와이어가드:
[Interface]
PrivateKey = ...
Address = 10.8.0.2/24
[Peer]
PublicKey = ...
AllowedIPs = 10.8.0.0/24,10.10.0.0/24
Endpoint = ...
서버 A 와이어가드:
[Interface]
PrivateKey =
Address = 10.8.0.1/24
ListenPort = 51820
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o cilium_host -j MASQUERADE
PostUp = iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o cilium_host -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o enp7s0 -j MASQUERADE
[Peer]
PublicKey =
AllowedIPs = 10.8.0.2/32
서버 B와 서버 A는 가상 사설망을 통해 연결됩니다.
업데이트: Wireguard 서비스 다시 로드
서비스를 다시 시작하는 것도 도움이 된 것 같습니다.
systemctl reload [email protected]
systemctl restart [email protected]
다음 규칙을 추가해 볼 수도 있지만 제거했는데도 여전히 작동했습니다.
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
업데이트: 기타 관련 문제(참고):
내 라우팅 테이블( )을 분석했을 때 ip route
:
default via 172.31.1.1 dev eth0
10.0.0.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.0.0.0/8 via 10.0.0.1 dev enp7s0
10.0.0.1 dev enp7s0 scope link
10.0.1.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50
10.0.1.50 dev cilium_host proto kernel scope link
10.0.2.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.0.3.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.8.0.0/24 dev wg0 proto kernel scope link src 10.8.0.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.31.1.1 dev eth0 scope link
10.0.0.0/8 via 10.0.0.1 dev enp7s0
더 큰 10.0.0.0/8 범위에 속하는 10.10.0.0/24 서브넷으로 인해 다른 경로와 충돌한다는 것을 깨달았습니다 . 그래서 Kubernetes/Cilium 네트워크를 이동하고(커피숍 등의 일반 네트워크와 충돌할 수 있는 10.0.0.0/8을 피하기 위해) VPC 네트워크도 좁혔습니다.
답변1
다시 생각해 본 결과, 작동하지 않는 이유는 아마도 AllowedIPs = 0.0.0.0/0
서버 A에서 B로의 VPN 캡슐화 트래픽이 와이어 가드 터널로 라우팅되기 때문일 것입니다.
따라서 솔루션은 이를 AllowedIPs = 10.8.0.2/32
.