Я создаю следующую настройку, используя контейнеры докеров
Докер-хост
: физическая машина, на которой запущены док-контейнеры.
опенвпн
: контейнер, который запускает openvpn и автоматически подключается к VPN.
nzbget
: контейнер с запущенным nzbget, веб-интерфейс доступен через порт <докер-хост-ip>:6789
Факты:
- Я могу получить доступ ко всем контейнерам, используя IP-адрес узла докера.
- Соединение openvpn успешно устанавливает соединение VPN.
-
nzbget
работает.
Второй этап моего плана заключается в маршрутизации трафика nzbget
контейнер через опенвпн
контейнер. Я успешно достиг этого, добавив следующую строку в docker-compose.yaml контейнера nzbget:
...
network_mode: "контейнер: openvpn"`
...
После этого запроса ipinfo.io
показывает мне IP VPN. Но после этого я теряю доступ к веб-интерфейсу nzbget через <докер-хост-ip>:6789
(время соединения истекло). Когда я (в целях тестирования) не позволяю опенвпн
контейнер установить VPN-соединение и перезапустить оба контейнера. Я могу подключиться к интерфейсу nzbget, используя <докер-хост-ip>:6789
. Итак, мне кажется, что само VPN-соединение мешает мне подключиться к контейнеру nzbget.
Теперь вопрос: как я могу настроить openvpn таким образом, чтобы он позволял мне подключаться к моему веб-интерфейсу nzbget, используя <докер-хост-ip>:6789
.
Я заметил, глядя на логи докера
принадлежащий опенвпн
контейнер, что при установлении VPN-подключения добавляются некоторые маршруты:
...
2021-11-16 19:03:38 Устройство TUN/TAP tun0 открыто
16.11.2021, 19:03:38 /sbin/ip link set dev tun0 up mtu 1500
2021-11-16 19:03:38 /sbin/ip link set dev tun0 up
2021-11-16 19:03:38 /sbin/ip-адрес добавить dev tun0 10.7.2.7/24
2021-11-16 19:03:38 /sbin/ip route add <vpn-ip-address>/32 через 172.18.0.1
2021-11-16 19:03:38 /sbin/ip маршрут добавить 0.0.0.0/1 через 10.7.2.1
2021-11-16 19:03:38 /sbin/ip маршрут добавить 128.0.0.0/1 через 10.7.2.1
...
Я думаю, что неправильная конфигурация/конфликтующие IP-маршруты вызывают мои проблемы. Итак, немного дополнительной информации.
Интерфейсы на опенвпн
контейнер:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
инет 127.0.0.1/8 область хоста lo
valid_lft навсегда
2: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние НЕИЗВЕСТНО qlen 500
ссылка/[65534]
инет 10.7.2.7/24 глобальная область tun0
valid_lft навсегда
85: eth0@if86: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
ссылка/эфир 02:42:ac:12:00:02 брд ff:ff:ff:ff:ff:ff
инет 172.18.0.2/16 brd 172.18.255.255 глобальная область действия eth0
valid_lft навсегда
Список IP-маршрутов, когда vpn активен на опенвпн
контейнер:
root@cf64c3dd2846:/# список IP-маршрутов
0.0.0.0/1 через 10.7.2.1 dev tun0
по умолчанию через 172.18.0.1 dev eth0
10.7.2.0/24 dev tun0 ссылка на область действия src 10.7.2.7
<vpn-ip-адрес> через 172.18.0.1 dev eth0
128.0.0.0/1 через 10.7.2.1 dev tun0
172.18.0.0/16 dev eth0 ссылка на область действия src 172.18.0.2
Список IP-маршрутов при включенном vpn нет активен на опенвпн
контейнер (в этой ситуации я могу получить доступ к веб-интерфейсу nzbget):
по умолчанию через 172.18.0.1 dev eth0
172.18.0.0/16 dev eth0 ссылка на область ядра proto src 172.18.0.2
Кто-нибудь знает правило IP-маршрута, которое я могу применить, чтобы разрешить доступ к веб-интерфейсу nzbget? При наличии активного VPN-подключения? Например, есть способ разрешить (только) входящий трафик на порт 6789 маршрутизироваться «обычно» (не через VPN)
Спасибо за вашу помощь!