我有以下问题:
我的服务器有一个公共静态IP。到目前为止,一切都很好。我的计划是绕过带有wireguard的防火墙,并且仍然能够通过公共IP访问服务器及其服务。我有另一台服务器作为 wirguard 服务器,因为它没有任何防火墙限制。当我第一次连接 A(具有公共 IP 的服务器)上的wireguard 隧道时,我的 ssh 会话停止工作。我无法通过 A 的公共 IP 连接到 A 的 ssh 服务。我只能通过服务器 B 和内部wireguard IP 进行连接。如何保持服务器 A 上的每个服务都可以通过 A 的公共 IP 访问?特别是码头工人?
我的第一个想法是这样的:
PostUp = ip rule add from PUBLIC table main
PreDown = ip rule del from PUBLIC table main
但此后 docker 服务就无法访问了。
sudo iptables -I FORWARD 4 -j LOG --log-prefix "RULE4:" --log-level 7
这是我尝试连接到 docker 服务后看到的结果。
RULE4:IN=ens192 OUT=br-ef854b642e53 MAC= SRC=My_home_public_ip DST=172.22.0.6(docker container) LEN=64 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=TCP SPT=2300 DPT=443 WINDOW=65535 RES=0x00 SYN URGP=0
RULE4:IN=br-ef854b642e53 OUT=wireguard-peer PHYSIN=vethf2383bb MAC= SRC=172.22.0.6 DST=My_home_public_ip LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=443 DPT=2300 WINDOW=65160 RES=0x00 ACK SYN URGP=0
对我来说,它看起来像这样:
我 -> A -> A 回答 -> Wireguard -> 什么都没有
但它应该更像
我 -> A -> A 回答 -> 我
对于所有其他流量:
A -> 线卫
答案1
这不完全是我想要的,但这是我的临时解决方案:
https://github.com/BrodyBuster/docker-wireguard-vpn
通过这个脚本,我能够将一些容器连接到 vpn 隧道,而无需使用 --network container:container_name 并使用正确的端口转发。如果容器现在需要访问隧道,我只需将 VPN 网络添加到其中即可。
还有一些注意事项:
首先,你不能同时启动主机wireguard和dockerwireguard。我相信如果您修改脚本,您也可以将其存档。然而,有时我们只需要主机系统上的隧道。在这段时间里,我可以忍受关闭 docker 隧道并启用主机隧道几分钟。
其次,此配置在重新启动后无法保留。即使容器在主机重新启动后已启动,并且即使隧道看起来已启动,您也无法访问容器。您需要将其拆除并在重新启动后重新运行脚本。这有点烦人。