Add a route to Docker network macvlan to connect on both local and VPN

2.9k Views Asked by At

My aim is that the docker container gets an IP different from server IP it is hosted on AND is reachable from VPN client

My server hosting 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

The server is connected to a network on 192.168.0.0/24 with gateway on 192.168.0.10.

And I have another server with OpenVPN with ips 192.168.0.150 and 12.20.0.1 (for VPN).

Every computer connected in remote to the VPN gets an ip on 12.20.0.0/24 network


Previously, I used an Ubuntu VM on VirtualBox and I added a route on each VM to be accessible from VPN

ip route add 12.20.0.0/24 via 192.168.0.150

This worked!


Now I'm using docker to replace my VM To get a different IP from server on 192.168.0.0/24 network I created a docker network macvlan:

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

Then I create a container test:

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

(I use privileged to add a route, better idea?)

Now I try to ping (ping 192.168.0.48) my container from two locations:

  • From another server on 192.168.0.0/24 network OK
  • From a client of the VPN: KO

So I thought I needed to add the route I added in my VM

$ 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 

Still, I can't ping from my VPN client computer

What am I doing wrong?

Thanks,

0

There are 0 best solutions below