Docker
通過 IPSec 路由(docker)容器流量
我有一個 ipsec (strongswan) 連接可以工作,它本身工作正常,但是來自容器的流量似乎沒有通過 ipsec 隧道。從最終使用者的角度來看,這不是預期的,因為 ipsec 不是拆分隧道。
#ipsec.conf config setup conn %default ikelifetime=28800s keylife=12h rekeymargin=3m keyingtries=1 keyexchange=ikev1 conn worldstream ike = aes256-sha1-modp1024 esp = aes256-sha1! xauth=client leftid=hbogert@acme.com leftauth=psk leftauth2=xauth leftsourceip=%config right=office.acme.com rightid=%any rightauth=psk auto=add rightsubnetwithin=0.0.0.0/0
我也在使用 strongswan 的bypass-lan外掛。
除了其他答案中提到的 CAP_NET_ADMIN 功能之外,我還需要添加一個 iptables 規則來將來自 Docker 網路的流量 SNAT 到所需的 VPN 網路。
iptables -j SNAT -t nat -I POSTROUTING 1 -o ${OUT_INTERFACE} -d ${VPN_NETWORK} -s ${DOCKER_NETWORK} --to-source ${VPN_HOST_IP}
我在ServerFault中對類似問題的回答中發現:
它應該通過為容器提供 CAP_NET_ADMIN 功能來工作(請參閱在雲平台上執行 strongSwan)。
這意味著將
--cap-add=NET_ADMIN
標誌與 docker 或cap_add: - NET_ADMIN
docker-compose 一起使用。這假設 strongswan 也具有此功能(預設情況下似乎具有此功能)。