Docker 在 openvpn 上使用 vxlan 路由的 swarm overlay 网络
Docker swarm overlay network with vxlan routing over openvpn
我设置了一个有 3 个节点的 docker 群 (docker 18.03)。这些节点使用覆盖网络进行通信。
node1:
laptop
host tun0 172.16.0.6 --> openvpn -> nat gateway
container n1
ip = 192.169.1.10
node2:
aws ec2
host eth2 10.0.30.62
container n2
ip = 192.169.1.9
node3:
aws ec2
host eth2 10.0.140.122
container n3
ip = 192.169.1.12
nat-gateway:
aws ec2
tun0 172.16.0.1 --> openvpn --> laptop
eth0 10.0.30.198
该方案部分有效:
1. 容器可以使用 name (n1,n2,n3)
互相 ping
2. Docker swarm 命令正在运行,可以部署服务
覆盖部分起作用。某些节点无法使用 tcp/ip 或 udp 相互通信。我尝试了 3 个节点与 udp 和 tcp/ip:
的所有组合
我在nat网关上做了一个tcpdump来监控overlay vxlan网络activity(端口4789):
tcpdump -l -n -i eth0 "port 4789"
tcpdump -l -n -i tun0 "port 4789"
然后我尝试 tcp/ip 从 node2 到 node3 的通信。在节点 3 上:
nc -l -s 0.0.0.0 -p 8999
在节点 1 上:
远程登录 192.169.1.12 8999
然后节点 1 将尝试连接到节点 3。我看到数据包通过 tun0 接口进入 nat 网关:
在 nat-gateway eth0 接口上:
nat-gateway 似乎没有通过 tun0 接口发回回复。
iptables 配置nat-gateway
nat-gateway的路由
你能帮我解决这个问题吗?
我已经能够在 NAT 网关上使用以下配置解决问题:
和
- 无需伪装 172.16.0.0/22。所有的工作人员和管理人员都将通过 NAT 网关将他们的流量路由到 172.16.0.0/22,它知道如何通过 tun0 发送数据包。
- 伪装 eth0 是错误的...
所有容器现在都可以 ping 并相互建立 tcp/ip 连接。
我设置了一个有 3 个节点的 docker 群 (docker 18.03)。这些节点使用覆盖网络进行通信。
node1:
laptop
host tun0 172.16.0.6 --> openvpn -> nat gateway
container n1
ip = 192.169.1.10
node2:
aws ec2
host eth2 10.0.30.62
container n2
ip = 192.169.1.9
node3:
aws ec2
host eth2 10.0.140.122
container n3
ip = 192.169.1.12
nat-gateway:
aws ec2
tun0 172.16.0.1 --> openvpn --> laptop
eth0 10.0.30.198
该方案部分有效:
1. 容器可以使用 name (n1,n2,n3)
互相 ping
2. Docker swarm 命令正在运行,可以部署服务
覆盖部分起作用。某些节点无法使用 tcp/ip 或 udp 相互通信。我尝试了 3 个节点与 udp 和 tcp/ip:
的所有组合我在nat网关上做了一个tcpdump来监控overlay vxlan网络activity(端口4789):
tcpdump -l -n -i eth0 "port 4789"
tcpdump -l -n -i tun0 "port 4789"
然后我尝试 tcp/ip 从 node2 到 node3 的通信。在节点 3 上: nc -l -s 0.0.0.0 -p 8999 在节点 1 上: 远程登录 192.169.1.12 8999
然后节点 1 将尝试连接到节点 3。我看到数据包通过 tun0 接口进入 nat 网关:
在 nat-gateway eth0 接口上:
nat-gateway 似乎没有通过 tun0 接口发回回复。
iptables 配置nat-gateway
nat-gateway的路由
你能帮我解决这个问题吗?
我已经能够在 NAT 网关上使用以下配置解决问题:
和
- 无需伪装 172.16.0.0/22。所有的工作人员和管理人员都将通过 NAT 网关将他们的流量路由到 172.16.0.0/22,它知道如何通过 tun0 发送数据包。
- 伪装 eth0 是错误的...
所有容器现在都可以 ping 并相互建立 tcp/ip 连接。