Раздача интернета с фильтром по IP и MAC

Настройка iptables для раздачи интерента только для одного устройства, в моём случае это телефон, подключённый через wifi с фильтрацией по IP и MAC адресам.

Да, тут используется Network Manager

Сразу обращаю внимание, что скрипт ниже не создаёт и не изменяет параметры никаких беспроводных соединений и никак не касатся настройки IP, маршрутов и прочего. Физическое соединение устанавливается с помощью NetworkManager, с помощью которого создаётся ad-hoc соеденение и устанавливается IP сервера(шлюза) в 172.16.172.1. Настроить его проблем не должно быть - понатыкать галочки и вписать айпи.

Сам скрипт (у меня он называется phone-net.sh):

#!/bin/bash

PEER_MAC="00:1F:E4:44:06:30"
PEER_IP="172.16.172.2"

IPTABLES="iptables"

echo 1 > /proc/sys/net/ipv4/ip_forward

${IPTABLES} -t mangle -I PREROUTING -m mac --mac-source ${PEER_MAC} \
-s ${PEER_IP} -j MARK --set-mark 100500
${IPTABLES} -t filter -I FORWARD -s ${PEER_IP} -j ACCEPT
${IPTABLES} -t filter -I FORWARD -d ${PEER_IP} -j ACCEPT
${IPTABLES} -t nat -I POSTROUTING -m mark --mark 100500 -j MASQUERADE

exit 0


Нужно изменить переменные PEER_MAC и PEER_IP соотетственно mac и ip телефна. Ну и незабыть прописать днс и шлюз на втором устройстве(телефоне).

После сохранения скрипта не забываем дать права на выполнение (chmod a+x phone-net.sh). Скрипт запускать только под рутом

Почему всё так сложно?

Действительно, зачем сначала помечать пакет с соответствующим маком и айпи, а потом только маскировать его? Дело в том, что в таблице nat уже не доступна информация об исходном маке.