Я отправляю пакеты из программы пользовательского пространства на свой беспроводной интерфейс wlan0. Я установил правило SNAT с iptables следующим образом
iptables -t nat -A POSTROUTING -o wlan0 -j SNAT --to 192.168.1.3
И это работает для всего обычного трафика, исходящего с моей машины.
Я работаю над программой, которая должна создавать пакеты, начиная со слоя 2. Iptables не применяет SNAT ни к каким пакетам уровня 3, отправляемым этой программой.
Могу ли я как-нибудь отправлять пакеты в пользовательском пространстве со слоя 2 и при этом применять к ним NAT?
Я перепечатал это из суперпользователь. Сделаю обновление, если что-нибудь там получу.
Когда пакеты отправляются непосредственно через интерфейс Ethernet, они не будут проходить через уровень IP в сетевом стеке ядра. Это также означает отсутствие iptables.
Вам нужно либо заставить программу генерировать пакет так, как вы хотите, либо вам нужно будет отправить пакет через уровень IP в вашем сетевом стеке.
Есть несколько различных способов получить пакет через сетевой стек:
Raw Sockets обходят стек netfilter, поэтому iptables не будет влиять на эти пакеты.