LINUX.ORG.RU
решено ФорумAdmin

iptables: Внешний ip-адрес для исходящего трафика lxc-контейнера

 ,


1

1

Добрый день.

Есть lxc-контейнер, который имеет внутренний адрес 10.0.3.2, работает через стандартный для lxc мост - lxcbr0. Сам lxc-сервер имеет внешний адрес 93.158.134.2. Контейнер доступен по внешнему адресу 93.158.134.3 и откликается благодаря правилу iptables:

-A PREROUTING -d 93.158.134.3/32 -j DNAT --to-destination 10.0.3.2

если зайти с контейнера куда-нибудь (wget myip.ru), то контейнер будет определен как хост с адресом 93.158.134.2, т.е. под адресом сервера.

Вопрос: можно ли как-то настроить iptables, что бы lxc-контейнер определялся на внешних системах как хост с адресом 93.158.134.3?

Если адрес 93.158.134.3 принадлежит тому-же серверу то надо его как-нибудь присвоить контейнеру. Не уверен как это правильно делать, думаю есть какой-то простой и красивый способ.
В общем-то это должно делаться без iptables.

MrClon ★★★★★ ()

У тебя два интерфейса на сервере? Смотри маршрутизацию или перенаправляй трафик в зависимости от source ip.

alozovskoy ★★★★★ ()
-t nat -A POSTROUTING -s 10.0.3.2 -j SNAT --to-source 93.158.134.3

Только зачем городить NAT туда-сюда, когда правильно сказали можно «повесить» этот белый IP сразу внутрь контейнера?

nstorm ()
Последнее исправление: nstorm (всего исправлений: 1)
Ответ на: комментарий от nstorm

спасибо, помогло:

iptables -t nat -I POSTROUTING 1 -s 10.0.3.2/32 -j SNAT --to-source 93.158.134.3

именно -I, а не -A, т.к. там было дефолтовое lxc-правило

-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE

и оно, насколько я понимаю, перехватывало трафик.

p.s. назначить белый ip внутрь было не вариантом, т.к. не все контейнера могут иметь белый ip-адрес, и при таком раскладе c ними возникают свои проблемы. (alozovsky: интерфейс один)

magentawb ()
Ответ на: комментарий от magentawb

именно -I, а не -A, т.к. там было дефолтовое lxc-правило

Ну так я и понятия не имею, что у вас там уже было в правилах.

и оно, насколько я понимаю, перехватывало трафик.

Не перехватывало, а дает доступ в инет всем контейнерам как-раз таки через другой IPшник.

т.к. не все контейнера могут иметь белый ip-адрес, и при таком раскладе c ними возникают свои проблемы. (alozovsky: интерфейс один)

И? Зачем всем давать? Я сказал конкретно этому контейнеру, которому всё-равно с помощью NAT этот IPшник «отдан».

nstorm ()
Ответ на: комментарий от nstorm

не понял, можете тогда пояснить примером (конфиг lxc, строки iptables) как «отдать белый ip-адрес конкретно этому контейнеру, которому все-равно с помощью NAT этот IPшник отдан»? я просто не знаю как отдать белый ip-адрес контейнеру без того что бы не отказываться от LXC_BRIDGE (/etc/default/lxc-net для ubuntu), не поднимая мост своими руками.

magentawb ()
Ответ на: комментарий от magentawb

Создать еще один бридж (например lxcbr1), к которому подключить физ. интерфейс с белым IP и виртуальный интерфейс контейнера. Убрать NAT и настроить белый IP прямо внутри контейнера.

Как-то примерно так:

/etc/network/interfaces

auto lxcbr1
iface lxcbr1 inet manual
        bridge_ports eth1
        bridge_fd 0
        bridge_maxwait 0

В конфе контейнера:
lxc.network.type=veth
lxc.network.link=lxcbr1
lxc.network.name=eth1
nstorm ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.