У меня есть сервер (Ubuntu) с двумя общедоступными IP-адресами: первый динамический, а второй статический.
Программное обеспечение, запущенное на сервере, подключается к общедоступной конечной точке Интернета, которая находится за брандмауэром для внесения в белый список IP-адресов, поэтому для работы необходимо использовать статический IP-адрес для исходящего трафика.
Сервер настроен таким образом, что статический IP-адрес находится в петлевом интерфейсе и настроен на
$ sudo vim /etc/network/interfaces.d/eip.cfg
auto lo:1
iface lo:1 inet static
address <static_ip>/32
post-up ip route replace default via <dynamic_ip> src <static_ip>
После перезагрузки сети можно увидеть статический IP-адрес примерно так:
$ curl ipinfo.io/ip
<static_ip>
Следовательно, все работает хорошо, и можно свернуть другую конечную точку. Все хорошо.
ПРОБЛЕМА
Программное обеспечение использует Docker и, таким образом, находится внутри контейнера, который даже использует пользовательскую сеть.
Я уже тестировал использование --network=host
и это хорошо работает, потому что это помещает контейнер в сеть хоста (где он работает).
Проблема заключается в том, что контейнер должен находиться в пользовательской сети, поскольку он подключается к другим внутренним службам в этой сети.
Я понимаю, что Docker использует MASQUERADE и что можно отключить его и настроить iptables вручную в качестве опции. Тем не менее, мне интересно, какие другие варианты доступны и какой вариант можно было бы рекомендовать.
Я открыт для предложений - возможно, кто-то уже сделал это! Спасибо!