我当前正在使用tinc在两台服务器之间创建VPN。这允许我从服务器A通过IP地址10.0.0.2
访问B并创建一个接口:
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 destination 10.0.0.1
inet6 fe80::babb:cc53:dd5e:23f8 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 42 bytes 11987 (11.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55 bytes 7297 (7.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我想将此 route 传递到服务器A上的docker容器:
version: '3.2'
services:
traefik:
image: "traefik:v2.2.0"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./acme:/acme"
- "./traefik.toml:/traefik.toml"
- "./rules:/etc/traefik/rules"
networks:
- traefik
deploy:
placement:
constraints:
- node.role == manager
networks:
traefik:
external: true
目前,在容器traefik
中,我可以ping 10.0.0.2
,但它完全是另一台主机。
如果我删除:
networks:
traefik:
external: true
并在network_mode: host
服务中添加traefik
,我可以路由到10.0.02
,但是随后我无法访问共享traefik
网络的其他容器。
如果我尝试将它们放在一起,则会收到错误消息:
“ network_mode”和“ networks”不能组合
换句话说,如何创建虚线连接?
这也描述了我的问题,因为container B
不能同时出现在两个网络中。
我添加了Server A
,作为一个更真实的群体示例。
答案 0 :(得分:0)
我想出的解决方案根本不使用tinc,而是使用autossh
通过以下命令有效地进行转发:
autossh -M 43585 -o "compression=no" -o "cipher=aes128-gcm@openssh.com" -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR 3000:localhost:3000 root@serverA
在服务器B上运行(第一张图片)。
这意味着我可以例如通过http://serverA:3000从容器路由到Server B
。