IPTABLES и перенаправление

интернет Linux Сети iptables

Задача: Пускать машину MAC 6c:71:d9:5f:XX:XX на определённый сайт, остальные запросы перенаправлять на 172.16.0.1

Имеем:

iptables -I FORWARD -i br0 -d 217.117.65.234 -j ACCEPT
iptables -t nat -I PREROUTING -i br0 -d 217.117.65.234 -j DNAT --to-destination 217.117.65.234
iptables -t nat -A PREROUTING -m mac --mac-source 6c:71:d9:5f:aa:aa -j DNAT --to-destination 172.16.0.1
iptables -A FORWARD -m mac --mac-source 6c:71:d9:5f:aa:aa -i br0 -j ACCEPT

Но что то в этой конструкции неправильно. Конфиг:

br0 - собраны vlan-ы смотрящие в локалку, там клиентская машина.
vlan15 - интерфейс смотрящий в интернет. Сайт находится в интернет.
172.16.0.1 - машина куда нужно перенаправлять всё, кроме запросов на сайт 217.117.65.234

Примечание:
172.16.0.1 - это шлюз.

iptables -I FORWARD -i br0 -d 217.117.65.234 -j ACCEPT
это правило разрешает форвардинг пакетов на 217.117.65.234
iptables -t nat -I PREROUTING -i br0 -d 217.117.65.234 -j DNAT --to-destination 217.117.65.234
Это правило добавлено для исключения перенаправления на 172.16.0.1 правилом ниже. Добавлено с ключом I - помещается в начало таблицы.
iptables -t nat -A PREROUTING -m mac --mac-source 6c:71:d9:5f:aa:aa -j DNAT --to-destination 172.16.0.1
помещено в конец таблицы, и срабатывает последним, при условии, что не сработало одно из правил выше (ключ A).
Правило iptables -t nat -A PREROUTING -m mac --mac-source 6c:71:d9:5f:aa:aa ! -d 217.117.65.234 -j DNAT --to-destination 172.16.0.1 не будет работать, так как сайтов, к которым нужно обеспечить несколько, и оно сработает в любом случае.

iptables -A FORWARD -m mac --mac-source 6c:71:d9:5f:aa:aa -i br0 -j ACCEPT

Это действительно лишнее.

А сейчас я отпишу, как удалось решить проблему:

Примечание:
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.1:80
перенаправляет все http пакеты на 172.16.0.1. Помещает правило в конец таблицы и отрабатывает последним для всех машин.

iptables -I FORWARD -i br0 -p tcp --dport 80 -d verification.privatbank.ua -j ACCEPT

Разрешает форвардинг на указанный сайт для http. Применяется ко всем клиентским машинам. Помещается в начало таблицы.

iptables -I FORWARD -i br0 -p tcp --dport 443 -d verification.privatbank.ua -j ACCEPT

То же для https.

iptables -t nat -I PREROUTING -i br0 -p tcp --dport 80 -d verification.privatbank.ua -j DNAT --to-destination 217.117.65.234

Необходимо для исключения срабатывания первого правила для пакетов отправляемых на verification.privatbank.ua (217.117.65.234 это IP verification.privatbank.ua) протокол TCP порт 80 (http).

iptables -t nat -I PREROUTING -i br0 -p tcp --dport 443 -d verification.privatbank.ua -j DNAT --to-destination 217.117.65.234

Аналогично для https.

Есть ещё несколько правил, но они из общих мануалов. Вот такая конструкция работает как положено.

Насчёт сети:

LOCAL_CLIENTS->(vlan0-vlan14)->br0->vlan15->INTERNET

172.16.0.1 - это шлюз.
vlan15 - это интернет
vlan0-vlan14 - локальная сеть с клиентами.

Тем машинам, которым нужен интернет в полном обьёме добавляется правило iptables -I FORWARD -m mac --mac-source 6c:71:d9:5f:aa:aa -i br0 -j ACCEPT

Вся эта конструкция пускает всех клиентов на разрешённые узлы, а отдельных - в интернет.

Примечание:
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.1:80

на самом деле имеет вид

iptables -t nat -A PREROUTING -i br0 -m mac --mac-source 6c:71:d9:5f:aa:aa -p tcp --dport 80 -j DNAT --to-destination 172.16.0.1:80

иначе открыть доступ другим машинам в сеть интернет не удавалось.
Ответы:
Инфраструктура не ясна.
Где вы настриваете эти правила iptables, на шлюзе или на машине ?
172.16.0.1 это шлюз, который смотрит в интернет ?


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.