我的目标是 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
我究竟做错了什么?
谢谢,