Снова про NAT

Помогите разобраться с NATом.
Есть следующая конфигурация сети:

n810:192.168.3.12-->wlan0:192.168.3.2--pc1--192.168.1.116:eth1-->|router         |
		     					         |LAN:192.168.1.1|
								 |              |-->internet
					    pc2:192.168.1.115 -->|               |

Здесь pc1 это gentoo на которой настраиваю доступ таблетки Nokia n810 к интернету, router - Dlink DI-604
Выполняю скрипт

#! /bin/bash
 iptables -F
 iptables -t nat -F


 iptables -P INPUT ACCEPT
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD DROP

 export LAN=wlan0
 export WAN=eth1

 iptables -I INPUT 1 -i ${LAN} -j ACCEPT
 iptables -I INPUT 1 -i lo -j ACCEPT
 iptables -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT
 iptables -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT

 iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

 iptables -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
 iptables -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

 iptables -I FORWARD -i ${LAN} -d 192.168.3.0/255.255.255.0 -j DROP
 iptables -A FORWARD -i ${LAN} -s 192.168.3.0/255.255.255.0 -j ACCEPT
 iptables -A FORWARD -i ${WAN} -d 192.168.3.0/255.255.255.0 -j ACCEPT
 iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

 echo 1 > /proc/sys/net/ipv4/ip_forward
 for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done 

Скрипт создан копированием из http://www.gentoo.org/doc/ru/home-router-howto.xml
Даю команду

iptables -L :
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     udp  --  anywhere             anywhere            udp dpt:bootps reject-with icmp-port-unreachable 
REJECT     udp  --  anywhere             anywhere            udp dpt:domain reject-with icmp-port-unreachable 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
DROP       tcp  --  anywhere             anywhere            tcp dpts:0:1023 
DROP       udp  --  anywhere             anywhere            udp dpts:0:1023 

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DROP       all  --  anywhere             192.168.3.0/24      
ACCEPT     all  --  192.168.3.0/24       anywhere            
ACCEPT     all  --  anywhere             192.168.3.0/24      

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

Команда на n810:

 ping 192.168.1.1  

проходит нормально.
Команда на n810:

ping 192.168.1.115 

(или на любой адрес в интернете) не исполняется, доступа на web интерфейс router'а нет.
При исполнении на n810: ping 192.168.1.1, анализатор wireshark, запущенный на pc1 показывает пакеты идущие в обоих направлениях (192.168.3.12--->192.168.1.1 и 192.168.1.1-->192.168.3.12)
При исполнении на n810: ping 192.168.1.115 - wireshark показывает пакеты идущие только
в одном направлении 192.168.3.12--->192.168.115.
Не могу ничего понять?!

на всяк случай

Так, на всякий случай: прописано ли на вашей таблетке route add default gw 192.168.3.2?

Скрипт отрабатывает гладко? iptables не ругается, что какой-то target не найден?

:}

Ни каких ошибок iptables не

Ни каких ошибок iptables не выдает. Мне именно не понятно почему 192.168.1.1 отвечает, а 192.168.1.115 - нет??

works for me ™

Хм. Ну а с 192.168.1.116 видно .115, я полагаю?

Чесно говоря, я шибко в этом деле не разбираюсь. Но недавно делал очень похожую схему, только пускал линк от рс1 через блютооth. И также читал хавту, и скрипт оттуда же, и таки все получилось. Вот, короче, мой скрипт (моя под-подсеть там 10.10.10.0/24), и да поможет вам интуиция:

IPTABLES=/sbin/iptables
IFEXT=eth2
IFINT=bnep0

$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT
$IPTABLES -F -t nat

# Then we lock our services so they only work from the LAN
$IPTABLES -I INPUT 1 -i $IFINT -j ACCEPT
$IPTABLES -I INPUT 1 -i lo -j ACCEPT
$IPTABLES -A INPUT -p UDP --dport bootps -i ! $IFINT -j REJECT
$IPTABLES -A INPUT -p UDP --dport domain -i ! $IFINT -j REJECT

# Drop TCP / UDP packets to privileged ports
$IPTABLES -A INPUT -p TCP -i ! $IFINT -d 0/0 --dport 0:1023 -j DROP
$IPTABLES -A INPUT -p UDP -i ! $IFINT -d 0/0 --dport 0:1023 -j DROP

# Finally we add the rules for NAT
$IPTABLES -I FORWARD -i $IFINT -d 10.10.10.0/255.255.255.0 -j DROP
$IPTABLES -A FORWARD -i $IFINT -s 10.10.10.0/255.255.255.0 -j ACCEPT
$IPTABLES -A FORWARD -i $IFEXT -d 10.10.10.0/255.255.255.0 -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $IFEXT -j MASQUERADE

# Tell the kernel that ip forwarding is OK
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

# (добавлено ручками в /etc/sysctl.conf)
#net.ipv4.ip_forward = 1
#net.ipv4.conf.default.rp_filter = 1
#If you have a dynamic internet address you probably want to enable this:
#net.ipv4.ip_dynaddr = 1

:}

Почему же не можете?

При пинге с 192.168.3.12 на 192.168.1.115 должно показывать, что пингует на самом деле только 192.168.1.116 — это бы означало, что маскарадинг работает. Если же у вас на 192.168.1.115 приходят пакеты от 192.168.3.12, то, разумеется, хост 1.115 ответить не может, т.к. не знает, где находится хост 3.12. :)

Почему же раутер отвечает, я не могу сказать. Может там поставили маршрут до 192.168.1.116, если приходят пакеты от 192.168.3.0 и забыли.

Спасибо всем

Спасибо всем откликнувшимся.
Проблема разрешилась путем повторного внимательного прочтения выщеуказанного howto.
Не были включены все нужные опции в ядре. В заблуждение и ступор ввело то что iptables при запуске скрипта не выдавало ни каких ошыбок а маскарадинг не работал.

CONFIG_IP_ADVANCED_ROUTER и товарищи

...не иначе субжевые опции не была включены? Я-то в своем посте хотел было намекнуть, да постеснялся показаться умнее :} Однако, я все ж был уверен, что в ее отсутствие iptables стали бы ругаться -- чего, очевидно, не вышло.

:}

Да именно так и было - позор

Да именно так и было - позор на мою седую голову! :)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".