Провожу такой тест:
запускаю чистый iptables (правил нет).
выполняю на компе с адресом 192.168.1.3
sysctl net.ipv4.ip_forward=1
Затем
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t nat -A PREROUTING -p udp -s 192.168.1.26 -j DNAT --to 192.168.1.26
У рабочей машины адрес 192.168.1.3, у второй машины адрес 192.168.1.26
Обе находятся за NAT на ADSL-модеме с адресом 192168.1.1
Теперь на второй машине с адресом 192.168.1.26 запускаю тест:
iperf -u -c 8.8.8.8 -p 1038
И на другой консоли на этой же машине:
iperf -s -u -p 1038
На машине с адресом 192.168.1.26 гейтвей указан 192.168.1.3, что в итоге должно дать результат: iperf должен успешно провести тест ширины канала.
Но сервер iperf с клиентом никак не могут найти друг друга. Где я сделал ошибку и как посмотреть, что не так?
По отчету tcpdump пакеты идут через машину 192.168.1.3 на адрес 8.8.8.8, но пакеты же должны были развернуться на адрес 192.168.1.26!!
Вот это огромное СПАСИБО! А то я уже всю голову себе сломал! А тут все так просто оказалось! Теперь буду курить исходники nf_nat_rule в ядре до полного просветления.
p.s. Ну вот и докурил. Теперь все как часы работает! )