Iptables

到 docker 的傳入流量嘗試通過wireguard隧道退出

  • October 26, 2021

我有以下問題:

我的伺服器有一個公共靜態 IP。到目前為止,一切都很好。我的計劃是繞過帶有wireguard的防火牆,仍然能夠通過公共IP訪問伺服器及其服務。我讓另一台伺服器充當 wirguard 伺服器,因為它沒有任何防火牆限制。我第一次在 A(這是具有公共 ip 的伺服器)上連接 wireguard 隧道時,我的 ssh 會話停止工作。我無法通過 A 的公共 IP 連接到 A 的 ssh 服務。我只能通過伺服器 B 和內部wireguard ip 進行連接。如何讓 A 的公共 IP 可以訪問伺服器 A 上的每項服務?特別是碼頭工人?

我的第一個想法是這樣的:

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 -> 護線

這不是我想要的,但這是我的臨時解決方案:

https://github.com/BrodyBuster/docker-wireguard-vpn

使用這個腳本,我能夠在不使用 –network container:container_name 和正確的埠轉發的情況下將一些容器連接到 vpn 隧道。如果容器現在需要訪問隧道,我可以將 vpn 網路添加到它。

仍然有一些警告:

首先,您不能同時啟動主機wireguard 和docker wireguard。如果您修改腳本,我相信您也可以將其存檔。但是,有時我們只需要主機系統上的隧道。在這幾分鐘內,我可以忍受關閉 docker 隧道並啟用主機隧道幾分鐘。

其次,此配置無法在重新啟動後繼續存在。即使在主機重新啟動後容器已啟動,即使隧道似乎已啟動,您也無法訪問容器。您需要將其拆除並在重新啟動後重新執行腳本。這有點煩人。

引用自:https://unix.stackexchange.com/questions/673381