Docker открытый порт перестает работать при подключении к VPN - PullRequest
2 голосов
/ 06 апреля 2020

Я пытаюсь создать образ Docker, который будет перенаправлять порт через VPN. Я создал простой образ, который выставляет порт 5144, и проверил, что он работает правильно:

sudo docker run -t -d -p 5144:5144 \
                --name le-bridge \
                --cap-add=NET_ADMIN \
                --device=/dev/net/tun \
                bridge
sudo docker exec -it le-bridge /bin/bash

Я проверяю, что порт выставлен правильно следующим образом:

[CONTAINER] root@6116787b1c1e:~# nc -lvvp 5144
[HOST] user$ nc -vv 127.0.0.1 5144

Затем, все, что я печатаю, правильно отображается в терминале контейнера. Однако, как только я запускаю демон openvpn, он больше не работает:

[CONTAINER] root@6116787b1c1e:~# openvpn logger.ovpn &
[1] 33
Sun Apr  5 22:52:54 2020 OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019
Sun Apr  5 22:52:54 2020 library versions: OpenSSL 1.1.1  11 Sep 2018, LZO 2.08
Sun Apr  5 22:52:54 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]
Sun Apr  5 22:52:54 2020 UDPv4 link local (bound): [AF_INET][undef]:1194
Sun Apr  5 22:52:54 2020 UDPv4 link remote: 
Sun Apr  5 22:52:54 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Sun Apr  5 22:52:55 2020 [] Peer Connection Initiated with [AF_INET]
Sun Apr  5 22:53:21 2020 TUN/TAP device tun0 opened
Sun Apr  5 22:53:21 2020 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Sun Apr  5 22:53:21 2020 /sbin/ip link set dev tun0 up mtu 1500
Sun Apr  5 22:53:21 2020 /sbin/ip addr add dev tun0 10.X.0.2/24 broadcast 10.X.0.255
Sun Apr  5 22:53:21 2020 Initialization Sequence Completed

root@6116787b1c1e:~#
root@6116787b1c1e:~# nc -lvvp 5144
listening on [any] 5144 ...

Отсюда, используя ту же самую команду netcat, я больше не могу получить доступ к открытому порту с хоста. Чего мне не хватает?

РЕДАКТИРОВАТЬ: Возможно, стоит упомянуть, что после запуска VPN соединение все еще успешно с хоста; он просто не достигает процесса netcat внутри контейнера.

1 Ответ

0 голосов
/ 06 апреля 2020

Я не совсем уверен, почему, но оказывается, что маршруты должны быть зафиксированы внутри контейнера. В моем случае следующая команда решает проблему:

ip route add 192.168.0.0/24 via 172.17.42.1 dev eth0

... где 172.17.42.1 - это IP-адрес интерфейса docker0 на моем хосте. Надеюсь, это поможет кому-нибудь однажды.

...