URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 86536
[ Назад ]

Исходное сообщение
"Натить весь трафик кроме сети1 ИЛИ сети2 ИЛИ сети3"

Отправлено alphil , 10-Сен-09 00:47 
Прошу помощи по iptables.

Есть такое правило (приблизительно):
iptables -t nat -A POSTROUTING -o ppp0 -d ! $NET1 -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -d ! $NET1 -p udp --dport 53 -j MASQUERADE

Клиенты получают доступ в Инет, если --destination не есть одна конкретная сеть. В эту сеть они попадают посредством VPN и не должны натиться. Так работало до сегодняшнего дня. Возникли осложнения, - необходимо добавить $NET2 и $NET3 и правило должно стать следующим:
"Натить все что идет в направлении ppp0, но только если это не в $NET1 ИЛИ не в $NET2 ИЛИ не в $NET3"

Ставить цепочки друг за другом нельзя, так как если мы прошли первое правило, которое не маскарадит пакеты для этой сети, то попадаемся на другом, которое говорит, что да - надо маскарадить.  

Заранее благодорю за помощь.


Содержание

Сообщения в этом обсуждении
"Натить весь трафик кроме сети1 ИЛИ сети2 ИЛИ сети3"
Отправлено aaa , 10-Сен-09 08:31 
>[оверквотинг удален]
>Так работало до сегодняшнего дня. Возникли осложнения, - необходимо добавить $NET2
>и $NET3 и правило должно стать следующим:
>"Натить все что идет в направлении ppp0, но только если это не
>в $NET1 ИЛИ не в $NET2 ИЛИ не в $NET3"
>
>Ставить цепочки друг за другом нельзя, так как если мы прошли первое
>правило, которое не маскарадит пакеты для этой сети, то попадаемся на
>другом, которое говорит, что да - надо маскарадить.
>
>Заранее благодорю за помощь.

iptables -t nat -A POSTROUTING -o ppp0 -d $NET1 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -d $NET2 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -d $NET3 -p tcp --dport 80 -j ACCEPT

iptables -t nat -A POSTROUTING -o ppp0  -p tcp --dport 80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0  -p udp --dport 53 -j MASQUERADE


"Натить весь трафик кроме сети1 ИЛИ сети2 ИЛИ сети3"
Отправлено Andrey Mitrofanov , 10-Сен-09 09:40 
>"Натить все что идет в направлении ppp0, но только если это не
>в $NET1 ИЛИ не в $NET2 ИЛИ не в $NET3"

-t NAT -N chain
-t NAT -A chain -d $NET1 -j RETURN
-t NAT -A chain -d $NET2 -j RETURN
-t NAT -A chain -d $NET3 -j RETURN
-t NAT -A chain -j MASQUERADE

-t NAT -A POSTROUTING  -o ppp0 -p tcp --dport 80 -j chain


"Натить весь трафик кроме сети1 ИЛИ сети2 ИЛИ сети3"
Отправлено boykov , 10-Сен-09 10:06 
>Ставить цепочки друг за другом нельзя, так как если мы прошли первое
>правило, которое не маскарадит пакеты для этой сети, то попадаемся на
>другом, которое говорит, что да - надо маскарадить.
>
>Заранее благодорю за помощь.

что значит нельзя? не понимаем принцип acl или еще что? разбираемся в логике (алгоритме) того, что надо сделать; помним, что первый сработал -- остальные пох.

то бишь
1) если пришло на net1 и ppp0 -- пропускаем
2) если пришло на net2 и ppp0 -- пропускаем
3) если пришло на ppp0 -- натим
4) что-то делаем с остальным трафиком...

уже потом переводим это на язык iptables и запускаем


" Натить весь трафик кроме сети1 ИЛИ сети2 ИЛИ сети3"
Отправлено alphil , 10-Сен-09 12:25 
Решение от Andrey Mitrofanov мне показалось наиболее элегантным. Попробовал - работает - "то что доктор прописал".

Спасибо всем отклинувшимся - за просветление.