Использование iptables для предоставления контейнеру LXC маршрутизируемого IP
Я использую Docker для управления контейнерами LXC. В настоящий момент Docker настраивает базовый контейнер LXC с маршрутизацией только на хост, а затем использует iptables / DNAT для пробивания дырок в контейнере, делая его доступным через IP-адрес хоста и «случайный» порт.
Это не будет работать для нас по ряду причин. Мы бы хотели, чтобы каждый контейнер был доступен через свой собственный (маршрутизируемый) IP. Так что я играл с использованием таблиц IP для этого. У меня он отлично работает дома (работает на Ubuntu Raring), но не на работе (работает на Ubuntu Precise). Я предполагаю, что есть какая-то конфигурация ядра по умолчанию, которая мне не известна.
Вот что я делаю:
1) Настройка нового виртуального интерфейса macvlan, чтобы я мог использовать DHCP для получения IP:
ip link add container1 link eth0 type macvlan dhclient container1 ip link set container1 up
На данный момент у меня есть новый интерфейс с собственным IP-адресом и шлюзом по умолчанию, маской подсети и т. Д., Соответствующими базовому физическому интерфейсу ( eth0
).
2) Настройте таблицы IP для входящего трафика DNAT с IP-адреса нового интерфейса. Допустим, новый интерфейс имеет IP, 10.10.10.88
а контейнер LXC, управляемый Docker, имеет IP 172.17.0.20.
iptables -t nat -N CONTAINER1 iptables -t nat -A PREROUTING -p all -d 10.10.10.88/32 -j CONTAINER1 iptables -t nat -A CONTAINER1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.20:8080
(Здесь я также NAT'ing порт с 80 до 8080).
Как уже упоминалось, это отлично работает дома. Теперь я могу получить доступ к этому контейнеру с хоста как 172.17.0.20:8080 и с другого компьютера в моей локальной сети как 10.10.10.88:80. (Интересно, что 10.10.10.88:80 я не могу достать его изнутри хоста, но, думаю, мне нужно другое правило, может быть, в цепочке OUTPUT, чтобы это уловить.) Но оно не работает на работе.
На работе, когда я пытаюсь добраться до этого контейнера, используя его маршрутизируемый IP (10.10.10.88 в этом примере), я вижу, что пакеты прибывают и соответствуют правилам iptables вплоть до правила DNAT. Я могу наблюдать это, используя как счетчики пакетов, напечатанные с помощью iptables -L, так и цель TRACE на необработанной таблице и просматривая журнал ядра. Но после сопоставления с правилом DNAT пакеты просто исчезают. На моей домашней машине (которая работает) после DNAT я вижу пакеты, проходящие через цепочку INPUT в таблице фильтров с новым (NAT) -эдиперечисленным IP-адресом назначения. На моей рабочей машине этот шаг не происходит.
На обеих машинах включена переадресация IP.
0 ответов на вопрос
Похожие вопросы
-
4
Я установил роутер Airport Extreme и получил предупреждение о "Double NAT". Почему это плохо?
-
7
Как я могу сделать мой домашний компьютер веб-сервером?
-
3
Какое оборудование и ОС следует использовать для настройки домашнего маршрутизатора / сервера для об...
-
-
2
Регистрация связи между двумя виртуальными машинами
-
4
Возможно ли в Linux iptables записать имя процесса / команды, которая инициирует исходящее соединени...
-
1
Доступ к веб-сайту через общедоступный IP-адрес веб-сервера с ПК в той же локальной сети
-
2
Почему мой общий доступ к Интернету загадочным образом нарушен?
-
3
Переадресация портов VirtualBox NAT на Ubuntu 64?
-
1
Отсутствует вкладка общего доступа в свойствах сети
-
2
Два общедоступных IP-адреса за кабельным модемом с использованием D-Link DIR-300