Дистрибутив Fedora 21.
Решил по быстрому сделать точку доступа WIFI, чтобы на пять минут раздать интернет 5 устройствам.
Все как обычно, например на шлюзе Debian.
Установил и настроил dhcp сервер и hostapd, включил forwarding пакетов echo 1 > /proc/sys/net/ipv4/ip_forward.
И тут я заглянул в правила iptables. Увидел кучу правил. Понял что они устанавливаются демоном firewalld. Не захотел в этом разбираться и остановил демон - правила исчезли, все цепочки пусты. Отлично!
Действие по умолчанию во всех цепочках accept. Добавил правило:
iptables -t nat -A POSTROUTING -s 192.168.1.0/28 -j MASQUERADE
Таблица Filter:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Таблица nat:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.1.0/28 0.0.0.0/0
Итого forwarding пакетов работает нормально. tcpdump показывает что пакеты нормально перенаправляются. Но ip адрес источника не изменяется. То есть MASQUERADE не работает.
Если добавить правило:
iptables -t nat -I POSTROUTING 1 -s 192.168.1.0/28 -j LOG
Вроде необходимые модули ядра подгружены:
lsmod | grep -E "nf|ipt"
ipt_MASQUERADE 12678 1
nf_nat_masquerade_ipv4 13203 1 ipt_MASQUERADE
nf_log_ipv4 12767 0
nf_log_common 13086 1 nf_log_ipv4
iptable_nat 12875 1
nf_conntrack_ipv4 14656 1
nf_defrag_ipv4 12702 1 nf_conntrack_ipv4
nf_nat_ipv4 13848 1 iptable_nat
nf_nat 25180 2 nf_nat_ipv4,nf_nat_masquerade_ipv4
nf_conntrack 103465 4 nf_nat,nf_nat_ipv4,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
iptable_raw 12678 0
Конечно я в итоге загуглил как включить nat через firewalld, и все заработало. Но мне очень интересно, почему же обычный iptables не работает.