LINUX.ORG.RU
ФорумAdmin

Нужна помощь с iptables, переброс сетевого трафика с одного шлюза на другой.

 


0

1

Всем доброго времени суток. Нужна помощь коллективного разума, потому что свой уже сломал.

Есть два linux сервера (serv1(proxy) и serv2(резервный)) в каждом по 4-и сетевых интерфейса. На сетевых интерфейсах serv1 висят два провайдера (eth1 и eth2), локальная сеть (eth0:192.168.55.1) и сеть телефонии (eth3:192.168.57.1), на резервном поднят только один интерфейс для локальной сети (eth0:192.168.55.2).

Теперь хочу в эту конструкцию добавить ещё одну сеть (192.168.99.0) для раздачи инета через Wi-Fi. Если бы на serv1 был ещё один свободный интерфейс проблемы не возникло бы, но интерфейса нет, поэтому решил пустить вай-файный инет через резервный сервер (serv2)

Для этого сделал следующее:

1) На serv1 добавил правила в iptables:
-A PREROUTING -s 192.168.99.0/24 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 192.168.99.0/24 -o eth1 -j SNAT --to-source 123.234.34.5

2) там же на serv1 добавил маршрут:
route add -net 192.168.99.0/24 gw 192.168.55.2

На serv2 поднял интерфейс eth1 c адресом 192.168.99.1:

1) в iptables:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.55.0/24 -i eth0 -j ACCEPT
-A INPUT -s 192.168.99.0/24 -i eth1 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.99.0/24 -d 192.168.55.1/32 -j ACCEPT
-A FORWARD -s 192.168.55.1/32 -d 192.168.99.0/24 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j DROP
-A FORWARD -i eth1 -o eth0 -j DROP
-A FORWARD -s 192.168.99.0/24 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

В таком формате инет в Wi-Fi сети есть (если закомментировать правила "-A FORWARD -i eth0 -o eth1 -j DROP" и "-A FORWARD -i eth1 -o eth0 -j DROP"), но так же есть доступ в локальная сеть, а это совсем не нужно.

Форумчане подскажите как разрулить данную ситуацию.

Маршрутизация неведома ?

robot12 ★★★★★
()

В таком формате инет в Wi-Fi сети есть <...>, но так же есть доступ в локальная сеть, а это совсем не нужно.

Не вчитывался, но я правильно понимаю что ты хочешь только в интернеты доступ дать, без локалки? Если так то смотри чтоб у тебя пакеты в сторону шлюза шли (который, я так понимаю, у тебя в «локальной» сети), а все остальное дропай. Кода ты дропаешь весь трафик в локальную сеть с wifi у тебя и до шлюза пакеты же не доходят.

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

Не вчитывался, но я правильно понимаю что ты хочешь только в интернеты доступ дать, без локалки?

Да правильно.

По идеи эти правила должны пускать вай-файную сеть к шлюзу
-A FORWARD -s 192.168.99.0/24 -d 192.168.55.1/32 -j ACCEPT
-A FORWARD -s 192.168.55.1/32 -d 192.168.99.0/24 -j ACCEPT
но трафик почему-то не идет, точнее сам шлюз я вижу, но получить с него инет не могу. Явно не хватает какого то правила, а какого никак не пойму.

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

" -A FORWARD -s 192.168.99.0/24 -j ACCEPT" и "-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT" поставь над другими FORWARD правилами и всё заработает, если больше ошибок нет. (особо не вчитывался).

ktulhu666 ☆☆☆
()
Последнее исправление: ktulhu666 (всего исправлений: 1)

Теперь хочу в эту конструкцию добавить ещё одну сеть (192.168.99.0) для раздачи инета через Wi-Fi. Если бы на serv1 был ещё один свободный интерфейс проблемы не возникло бы, но интерфейса нет

Дальше не читал. Парень, ты про VLAN слышал когда-нибудь?

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

Таким образом будет открыт не только интернет но и доступ в локальную сеть, а этого нужно избежать.
При выше приведенных правилах я вижу на проксе пакеты из вай-файной сети, в инет они попадают, а обратно нет натыкаясь на правила
-A FORWARD -i eth0 -o eth1 -j DROP
-A FORWARD -i eth1 -o eth0 -j DROP
Я так понимаю нужно правило что-то типа:
Разрешить пакеты из инета в интерфейс eth1 (или сеть 99.0).
Не просто с интерфейса на интерфейс, а именно нужные пакеты в нужный интерфейс.
Есть мысли как написать это правило?

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

Сделать так:
если wifi-сеть у нас wlan0 с 192.168.33.0/24, а локалка eth0 192.168.22.0/24, то iptables будет выглядеть так:
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -s 192.168.33.0/24 ! -d 192.168.22.0/24 -j ACCEPT
-A FORWARD -i eth0 -s 192.168.22.0/24 -j ACCEPT
-A FORWARD -j DROP

При этом маршрутизация СОЕДИНЕНИЙ (а не пакетов в узком смысле) из локалки в wifi будет работать из-за первого правила, а наоборот - нет. Можно использовать только -i или только -s. И вообще - делать DROP в середине таблицы - это не правильно и имеет место для fail2ban-like варианта или для сложных конфигураций (но тут лучше в таблицы выносить такие сложные правила). В стандартном варианте (во всех таблицах) должны идти ACCEPT-правила и ЗАКРЫВАТЬСЯ DROP/REJECT правилом/политикой. И "-m state --state RELATED,ESTABLISHED" всегда должно быть первым правилом.

ktulhu666 ☆☆☆
()
Последнее исправление: ktulhu666 (всего исправлений: 2)
Ответ на: комментарий от gerbert000

Нет не проще, меня интересует данная ситуация, а так же iptables и его возможности.

Правое ухо левой ногой чесать не пробовал? Для проверки возможностей.

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

По идеи эти правила должны пускать вай-файную сеть к шлюзу

-A FORWARD -s 192.168.99.0/24 -d 192.168.55.1/32 -j ACCEPT

но трафик почему-то не идет, точнее сам шлюз я вижу, но получить с него инет не могу.

Матчасть учите. В ip-пакет есть адрес отправителя и получателя. Там нет адреса шлюза. Когда пакет идёт в инет, там не будет адреса 192.168.55.1.

Вам в iptables нужно запретить сети 99.0/24 ходить в сети 55.0/24 и 57.0/24 или вобще в 192.168.0.0/16.

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

Спасибо за идею, следующими правилами добился того, что мне нужно:
Строки 2 и 3 открывают доступ к dns запросам.
4,5 разрешают http только в инет.
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.99.0/24 -d 192.168.55.1/32 -j ACCEPT
-A FORWARD -s 192.168.55.1/32 -d 192.168.99.0/24 -j ACCEPT
-A FORWARD -i eth1 -o eth0 ! -d 192.168.10.0/24 -p tcp -m multiport --dports 53,80,8080,443 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -p tcp -m multiport --dports 53,80,8080,443 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j DROP
-A FORWARD -i eth1 -o eth0 -j DROP

Единственное не понимаю, пока ещё, почему ПК из 99 сетки с прописанным dns`ом провайдера не хочет резолвить инетовские имена, насчет этого не будет мыслей?

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