Моя цель заключается в том, чтобы контейнер docker получил IP-адрес, отличный от IP-адреса сервера, на котором он размещен, и доступ к нему возможен из VPN-клиента
Мой серверный хостинг docker config:
$ 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.
И у меня есть другой сервер с OpenVPN с ips 192.168.0.150 и 12.20.0.1 (для VPN).
Каждый компьютер, подключенный удаленно к VPN, получает IP-адрес в сети 12.20.0.0/24
Ранее я использовал виртуальную машину Ubuntu в VirtualBox и добавил маршрут на каждую виртуальную машину. быть доступным из VPN
ip route add 12.20.0.0/24 via 192.168.0.150
Это сработало!
Теперь я использую docker для замены своей виртуальной машины. Чтобы получить другой IP-адрес от сервера в сети 192.168.0.0/24, я создал docker сетевой 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 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
Что я делаю не так ?
Спасибо,