0

我的目标是 docker 容器获得的 IP 与其托管的服务器 IP 不同,并且可以从 VPN 客户端访问

我的服务器托管 docker 配置:

$ sudo docker -v
Docker version 19.03.6, build 369ce74a3c
$ sudo docker-compose -v
docker-compose version 1.17.1, build unknown
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:   bionic

服务器连接到 192.168.0.0/24 上的网络,网关在 192.168.0.10。

我还有另一台带有 ips 192.168.0.150 和 12.20.0.1(用于 VPN)的 OpenVPN 服务器。

每台远程连接到 VPN 的计算机都会在 12.20.0.0/24 网络上获得一个 ip


以前,我在 VirtualBox 上使用了 Ubuntu 虚拟机,并在每个虚拟机上添加了一条可从 VPN 访问的路由

ip route add 12.20.0.0/24 via 192.168.0.150

这行得通!


现在我正在使用 docker 替换我的 VM 为了从 192.168.0.0/24 网络上的服务器获取不同的 IP,我创建了一个 docker network macvlan:

sudo docker network create -d macvlan -o parent=eno1 --subnet 192.168.0.0/24 --gateway 192.168.0.10 publicNet

然后我创建一个容器测试:

sudo docker run --rm -dit --privileged -network publicNet --name my-macvlan-alpine --ip="192.168.0.48" alpine:latest ash

(我使用特权添加路线,更好的主意?)

现在我尝试从两个位置ping ( ping 192.168.0.48 ) 我的容器:

  • 从 192.168.0.0/24 网络上的另一台服务器 OK
  • 来自 VPN 的客户端:KO

所以我想我需要添加我在虚拟机中添加的路由

$ sudo docker exec -it my-macvlan-alpine ash -c "ip route add 12.20.0.0/24 via 192.168.0.150 && ip route"
default via 192.168.0.10 dev eth0 
12.20.0.0/24 via 192.168.0.150 dev eth0 
192.168.0.0/24 dev eth0 scope link  src 192.168.0.48 

尽管如此,我还是无法从我的 VPN 客户端计算机 ping

我究竟做错了什么?

谢谢,

4

0 回答 0