Назад | Перейти на главную страницу

iptables - Перенаправить, кроме списка MAC-адресов

Я использую iptables на своем маршрутизаторе для перенаправления всего веб-трафика на мою страницу.

Но я не знаю, как исключить мой список MAC-адресов.

Я так приказал

iptables -t nat -A PREROUTING -m mac ! --mac-source xx-xx-xx-xx-xx-xx -p tcp --dport 80  -j DNAT --to 127.0.0.1:8080 (Host A)
iptables -t nat -A PREROUTING -m mac ! --mac-source xx-xx-xx-xx-xx-xx -p tcp --dport 80  -j DNAT --to 127.0.0.1:8080 (Host B)

Но он просто выполняет команду для хоста A. Это означает, что хост A может получить доступ к сети в обычном режиме, но хост B все еще получил перенаправление.

Как я могу получить нормальный доступ для обоих MAC-адресов?

У вас возникла эта проблема, поскольку вы используете!. Скажем, приходит один запрос, и если Mac-адрес следующего хоста отличается от MAC-адреса хоста A, он будет перенаправлен. И, следовательно, он также перенаправляется на хост B. И ваше второе правило никогда не будет выполнено.

Итак, решение, как исключить мой список MAC-адресов?

  1. Перейти к одной пользовательской цепочке
iptables -t nat -N accept_my_mac_set
iptables -t nat -A PREROUTING -j accept_my_mac_set
iptables -t nat -A PREROUTING -j DNAT --to 127.0.0.1:8080
  1. Примите свой Mac, установленный в accept_my mac_set, в противном случае вернитесь из цепочки accept_my_mac_set и перенаправьте весь трафик
iptables -A accept_my_mac_set -m mac --mac-source xx-xx-xx-xx-xx-xx, xx-xx-xx-xx-xx-xx -p tcp --dport 80 -j ACCEPT  
iptables -A accept_my_mac_set -j RETURN