Задача: Пускать машину 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
иначе открыть доступ другим машинам в сеть интернет не удавалось.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.