我在CoreOS中运行docker Openvpn容器:
docker run –cap-add NET_ADMIN –device / dev / net / tun …Container作为客户端连接到VPN,其他VPN客户端可以ping容器。它运行正常……
因此,我假设您有一个连接到VPN服务器的容器,并且由于IP限制等原因,您需要通过此容器访问服务器。
1-如果您使用的是Bridge Network,这是运行容器时的默认设置:
为了实现您需要在容器内安装IPTables,并在启动VPN连接后运行以下命令:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
从您要访问服务的主机上,您可以使用 iproute 命令通过容器路由连接,如下所示:
iproute
假设您要通过IP:172.17.0.4的容器访问IP 192.168.0.20的远程服务器
ip route add 192.168.0.20 via 172.17.0.4
现在,无论何时访问192.168.0.20服务器,它都将通过容器内的VPN客户端。
2-你可以通过 --network=host 至 docker run 在这种情况下,您不需要执行任何额外的步骤,因为默认情况下连接将通过VPN路由
--network=host
docker run
鉴于你有一个容器 的 ÿ 强> 使用端口9000并可通过Container访问 的 X 强> 。
容器 的 X 强> 连接到VPN。
连接到同一VPN的用户想要访问Container 的 ÿ 强> 他应该通过Container 的 X 强> ,然后您需要在Container中应用以下防火墙规则 的 X 强>
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 9000 -j DNAT --to-destination $CONTAINER_Y_DOCKER_IP iptables -t nat -A POSTROUTING -p tcp -d $CONTAINER_Y_DOCKER_IP --dport 9000 -j SNAT --to-source $CONTAINER_X_DOCKER_IP iptables -A FORWARD -m state -p tcp -d $CONTAINER_Y_DOCKER_IP --dport 9000 --state NEW,ESTABLISHED,RELATED -j ACCEPT