LINUX.ORG.RU
ФорумAdmin

[iptables] Мосты и NAT

 


0

1

Есть два моста, br0 и br1. br0 смотрит локалку, br1 - в адресное пространство, выданное провом.

Есть такие вот правила iptables:
-A PREROUTING -d $(gate_addr)/32 -p tcp -m multiport --dports $(ports) -j DNAT --to-destination 192.168.1.3
-A PREROUTING -d $(gate_addr)/32 -p tcp --dport $(port) -j DNAT --to-destination 192.168.1.2
-A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source $(gate_addr)
-A POSTROUTING ! -s 192.168.1.0/24 -p tcp -m multiport --dports $(ports) -j SNAT --to-source 192.168.1.1
-A POSTROUTING ! -s 192.168.1.0/24 -p tcp -m tcp --dport 4897 -j SNAT --to-source 192.168.1.1
COMMIT

192.168.1.1 - адрес интерфейса br0
$(gate_addr) - реальный внешний адрес гейта

Вопрос в следующем:
Эти правила прекрасно работают и все задачи решены. Но, стоит только поставить в правило построута значение -o br0, вместо того, что выделено жирным, то становится невозможно подключиться на проброшенные порты. Настраивал по удаленке.

По логике вещей, я сначу исходящие из интерфейса br0 пакеты в реальный адрес гейта. До добавления моста с реальными ip все работало именно так.

Где моя ошибка? Мне просто интересно почему не работает при указании интерфейса. Дело принципа, так сказать.



Последнее исправление: Neoretix (всего исправлений: 2)

/ничеговмостахнепонимаю mode on

пакет обрабатывается как исходящий с некоторого физического интерфейса, коим br0 не является. Мой любимый совет - попробуй маскарад вместо сната.

spunky ★★
()
Ответ на: комментарий от Neoretix

смотри картинку 2b по замечательной ссылке товарища markevichus, ну где же у тебя в построутинге br0? Там уже определились с физическим интерфейсом :)

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

Я не могу оставить один т.к. в один включен кабель интернетов а в другой сервак, который должен реальный адрес иметь :)

Вопрос в другом - я не могу обработать через -o интерфейс моста?
Тогда пусть и остается адресное пространство.
Просто стало интересно почему не работало.

Neoretix
() автор топика
Ответ на: комментарий от spunky

>пакет обрабатывается как исходящий с некоторого физического интерфейса, коим br0 не является.
В случае с ppp указывать исходящий интерфейс можно, хотя тот не является железкой.

markevichus ★★★
()
Ответ на: комментарий от spunky

Да, что-то я не заметил - у меня сейчас указан br1.
Но это не подходит для решения задачи. Но работает. С br0 нет. Почему?

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

позволь уточнить - правило в postrouting с snat-ом для пакетов, адресованных в локальную сеть, работает при указание исходящего интерфейса br1? Но ведь вроде br1 - это интерфейс с провайдерской сетью, не? Т.е. в br1 есть 2 физических интерфейса, один из которых смотрит на «твой» сервер, получивший от прова реальный адрес, а второй смотрит на провайдера?

spunky ★★
()

бридж это не сосвсем обычный интерфейс. Что есть «входящие пакеты» в бридж? Или исходящие? Любой пакет который попал в бридж будет входящим для одних интерфейсов и исходящим для других. Думаю поэтому и не пашет.

true_admin ★★★★★
()
Ответ на: комментарий от Pinkbyte

Благодарю, это то что нужно.

Обнаружил еще один недочет в правиле оконечного SNAT - не шли соединения из ната на внешний адрес по проброшенным портам. Снаружи шли.

Решил следующим образом:
-A POSTROUTING -o br1 ! -s $(addr_pool)/28 -j SNAT --to-source $(gate_addr)

- исходящие соединения из addr_pool перестали снатиться в gate_addr
- проброс портов работает полностью и задача решена

С критерием сегодня тоже поэкспериментирую и отпишусь.

P.S. - addr_pool это блок реальных ip которые выдал пров.

Neoretix
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.