CoreOS - 将主机端口暴露给VPN

问题描述 投票:-1回答:1

我在CoreOS中运行docker Openvpn容器:

docker run --cap-add NET_ADMIN --device /dev/net/tun ...

Container作为客户端连接到VPN,其他VPN客户端可以ping容器。它在配置中使用openvpn选项在其中运行正常的dev tun进程。

我的任务是通过VPN客户端容器内的-p将此机器上的主机端口(来自任何其他容器的tun0ublushed端口)提供给其他VPN客户端(因此它必须是主机才能设置路由?)。怎么实现这个?

docker networking coreos openvpn tun
1个回答
1
投票

因此,我假设您有一个连接到VPN服务器的容器,并且由于IP限制等原因,您需要通过此容器访问服务器。

1-如果您使用的是Bridge Network,这是运行容器时的默认设置:

为了实现您需要在容器内安装IPTables,并在启动VPN连接后运行以下命令:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

从您要访问服务的主机上,您可以使用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路由


Update:

假设您有一个容器Y,其端口为9000,可通过容器X访问。

容器X连接到VPN。

连接到同一VPN的用户想要访问容器Y并且他应该通过容器X,然后您需要在容器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
© www.soinside.com 2019 - 2024. All rights reserved.