@kocmoc941
C/C++ Developer

Iptables redirect eth0 to eth1, как проверить работоспособность?

Смысл в следующем:
у меня дома есть комп с eth0 - инет (прямой по dhcp от провайдера) и eth1 - который подключен к роутеру через который я хочу раздавать вафлю, но нет времени настраивать.
Т.к. я только перешёл на линукс (кстати DEBIAN JESSIE), я поставил ещё и на работе на виртуалку его, дабы написать скриптик по настроики сети и просто дома выполнить.
Но есть проблема, мне его надо проверить, уже 2 попытки настроить дома не увенчались успехом (поэтому решил делать так), собственно вопрос:
как настроить роутинг пакетов на eth1 и проверить его, т.е. пакеты будут раздаваться только через eth0->eth1->browser, если например сделать ifconfig eth1 down - то инет отрубится ?
пробовал так:
#принимаем только установленные
iptables -P INPUT DROP
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#тут пытаюсь направить все пакеты на eth1
iptables -tnat -A PREROUTING -i eth0 -j DNAT --to-destination 192.168.10.5

#собственно думаю понятно, что я хотел сделать
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

#вот тут есть вопрос: я запрещаю все локальные исходящие пакеты с eth0, но с eth1->eth0 - будет считаться ?
iptables -A OUTPUT -o etho -j DROP

#собственно сам роутинг
iptables -tnat -A POSTROUTING -o eth0 -j MASQUERADE
  • Вопрос задан
  • 1642 просмотра
Решения вопроса 1
@Baton34
Надо превратить комп с дебианом в роутер:
sysctl net.ipv4.ip_forward=1 # Разрешаем шлюзу передавать транзитный трафик
iptables -F FORWARD # На всякий случай очистим цепочку FORWARD
# Разрешаем проходить пакетам по уже установленным соединениям
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Разрешаем исходящие соединения из локальной сети к интернет-хостам
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -j ACCEPT
iptables -P FORWARD DROP # Весь остальной транзитный трафик — запрещаем.
iptables -t nat -F POSTROUTING # На всякий случай очистим цепочку POSTROUTING таблицы nat
# Маскарадим весь трафик, идущий через eth0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Почитай учебник по iptables

#вот тут есть вопрос: я запрещаю все локальные исходящие пакеты с eth0, но с eth1->eth0 - будет считаться ?
iptables -A OUTPUT -o etho -j DROP
Этим правилом отрубишь выход в инет с самого дебиан-роутера, т.к. пакет сначала проходит output а потом уже postrouting. Вот схема наглядная: Netfilter-tables.jpg
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
gr1mm3r
@gr1mm3r
50% ответа в правильном вопросе. Остальное мануал.
iptables -tnat
не сработает т.к. -t nat будет валидным.
#собственно думаю понятно, что я хотел сделать
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

вы дропнули весь форвардинг трафика. После первого правила последующие не сработают.
#принимаем только установленные
iptables -P INPUT DROP


Вы перезагрузили компьютер. Установленных соединений пока нет. как будете подключатся ?
Ответ написан
@kocmoc941 Автор вопроса
C/C++ Developer
вы дропнули весь форвардинг трафика. После первого правила последующие не сработают.

как я дропнул:
iptables -P FORWARD DROP - это политика по умолчанию
и к ней добавил 2 разрешающих правила
про
не сработает т.к. -t nat будет валидным.

честно не понял -t nat и -tnat - одно и тоже

Вы перезагрузили компьютер. Установленных соединений пока нет. как будете подключатся ?

установленные соединения появятся по моей инициативе, когда я выдам запрос на соединение, а не мне...
Ответ написан
Mystray
@Mystray
NOC
Не очень понятно что вы хотите сделать. Что за адрес в дНАТ, какие адреса на интерйфейсах?

#собственно думаю понятно, что я хотел сделать

Не очень. Сначала вы запретили форвард, потом разрешили его же. У вас там больше двух адаптеров?

Если вам надо сделать простой примитивный НАТ, как на обычных роутерах, то это делается абсолютно иначе, без dnat, зато с snat/masquerade.
iptables -t nat -A POSTROUTING -o <интерфейс в сторону интернета> -j MASQUERADE
iptables -P FORWARD ACCEPT
sysctl -w net.ipv4.ip_forward=1

Этого, как правило, достаточно, если не накосячили в других местах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы