Контейнерный порт / сервис, доступный со всех IP-адресов хоста с настраиваемым мостом док-станции, связанным с псевдонимом IPv4 на Synology NAS

501
Lars Beugelaar

Добрый день всем.

У меня есть вопрос относительно Docker на NAS-устройстве Synology (Linux).

У меня есть контейнер Ubiquity Unifi Controller, работающий на этом NAS. (jacobalberti / unifi) Для этого образа необходимы определенные порты, которые должны быть доступны сети для связи с оборудованием Unifi. Идея состоит в том, чтобы сделать этот контейнер доступным через IP-адрес, отличный от того, за которым работают все службы NAS.

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

-Карта портов 1: 1 на IP-адрес хоста, например:

docker run-p 192.168.1.3:8443:8443 

Создайте сеть Docker Bridge и привяжите ее к определенному IP-адресу хоста, например:

docker network create --driver=bridge --gateway=10.0.0.1 \ --subnet=10.0.0.0/24 --ip-range=10.0.0.2/24 \ -o "com.docker.network.bridge.name"="br_UUC" \ -o "com.docker.network.bridge.host_binding_ipv4"="192.168.1.3" UUC_bridge 

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

После создания новой сети я могу связать контейнер с мостовой сетью UUC_bridge и выполнить сопоставление портов 1: 1.

Я ожидаю, что смогу получить доступ к порту 8443 контейнера за IP-адресом 192.168.1.3, в то время как IP-адрес хоста NAS 192.168.1.2 имеет свободный порт 8443 или используется другой службой.

Теперь мне нужен способ иметь второй IP-адрес 192.169.1.3 на сетевом адаптере хоста. Поскольку мне не нужны изолированные сети, я думаю, что VLAN не являются решением. Я читал, что им также понадобится другой сетевой драйвер докера. (Macvlan)

Я создал псевдоним на сетевой карте NAS, выполнив следующую команду:

ifconfig eth0:0 192.168.1.3 up netmask 255.255.252.0 name UUC 

(Я делаю это перед созданием Docker Bridge)

Я знаю, что есть другие способы сделать это с помощью ip address add, но старый способ все еще работает.

Neworks отображаются как: eth0 и eth0: 0 ifconfig
UUC_bridge ifconfig

и конфиг моста: сеть докера проверяет UUC_bridge

Теперь о проблемах, с которыми я сталкиваюсь:

В netstatя нахожу запись, которая выглядит как:tcp6 0 0 :::8443 :::* LISTEN 0 6783321 -

Теперь кажется, что, глядя на вывод ifconfig, мостом является IPv6. Я не знаю, как работает связывание IPv4 <> IPv6, но я бы сказал, что это не должно быть проблемой, потому что я сказал Docker, что он должен связать мост с этим одним IPv4-адресом 192.168.1.3.

Теперь я могу получить доступ к интерфейсу UUC через 192.168.1.3:8443. Дело в том, что я также могу получить доступ к тому же интерфейсу UUC через 192.168.1.2:8443. Я не хочу этого, и я не понимаю, почему он это сделал.

Возможно, контейнер UUC использует 0.0.0.0 для предоставления 8443 всем интерфейсам хоста (контейнера), но я настроил мост так, чтобы он был просто связан с IPv4-адресом 192.168.1.3.

Кто-нибудь знает, что мне здесь не хватает?

Другая проблема, с которой я сталкиваюсь, заключается в том, что все службы Synology, похоже, используют 0.0.0.0 в качестве IP-адреса привязки порта, поэтому все службы Synology также доступны за 192.168.1.3. Есть ли способ удалить адрес 192.168.1.3 из группы IP-адресов хоста, с которой связан адрес 0.0.0.0 NAS?

Спасибо заранее!

1

0 ответов на вопрос