Немного изменил конфигурацию:eth0 - 200.200.200.1/24 - смотрит в локальную сеть
eth1 - 10.10.10.10/24 - смотрит на адсл-модем
правила iptables:
[codebox]FW='/usr/sbin/iptables'
IF_LOCAL='eth0'
IP_LOCAL='200.200.200.1'
NET_LOCAL='200.200.200.0/24'
IF_NET='eth1'
IP_NET='10.10.10.10'
NET_NET='10.10.10.0/24'
IF_PPP='ppp+'
PPP_NET='100.100.100.0/24'
IP_GW1='10.10.10.1'
EXT_NET='0/0'
echo 1 > /proc/sys/net/ipv4/ip_forward
route add default gw $IP_GW1
$FW -F
$FW -X
$FW -Z
$FW -t nat -F
$FW -t mangle -F
# ************ INPUT *****************************
$FW -A INPUT -i lo -j ACCEPT
$FW -A INPUT -i $IF_PPP -j ACCEPT
$FW -A INPUT -i $IF_LOCAL -s $PPP_NET -j ACCEPT
$FW -A INPUT -i $IF_LOCAL -s $NET_LOCAL -p tcp --dport 1723 -j ACCEPT
$FW -A INPUT -i $IF_LOCAL -s $NET_LOCAL -p udp --dport 1723 -j ACCEPT
$FW -A INPUT -i $IF_LOCAL -s $NET_LOCAL -p gre -j ACCEPT
$FW -A INPUT -i $IF_LOCAL -j DROP
# ************ OUTPUT *****************************
$FW -A OUTPUT -o lo -j ACCEPT
$FW -A OUTPUT -o $IF_PPP -j ACCEPT
#$FW -A OUTPUT -o $IF_LOCAL -d $PPP_NET -j ACCEPT
$FW -A OUTPUT -o $IF_LOCAL -d $NET_LOCAL -p tcp --sport 1723 -j ACCEPT
$FW -A OUTPUT -o $IF_LOCAL -d $NET_LOCAL -p udp --sport 1723 -j ACCEPT
$FW -A OUTPUT -o $IF_LOCAL -d $NET_LOCAL -p gre -j ACCEPT
$FW -A OUTPUT -o $IF_LOCAL -j DROP
# ************ FORWARD *****************************
$FW -A FORWARD -i $IF_PPP -d $EXT_NET -j ACCEPT
$FW -A FORWARD -s $EXT_NET -d $PPP_NET -j ACCEPT
# ************ POSTROUTING *****************************
$FW -t nat -A POSTROUTING -s $PPP_NET -d $EXT_NET -j SNAT --to-source $IP_GW1
[/codebox]
iptables-save
[codebox]# Generated by iptables-save v1.3.6 on Tue Sep 15 09:38:29 2009
*mangle
:PREROUTING ACCEPT [392:27906]
:INPUT ACCEPT [383:27310]
:FORWARD ACCEPT [9:596]
:OUTPUT ACCEPT [288:20286]
:POSTROUTING ACCEPT [235:16202]
COMMIT
# Completed on Tue Sep 15 09:38:29 2009
# Generated by iptables-save v1.3.6 on Tue Sep 15 09:38:29 2009
*nat
:PREROUTING ACCEPT [128:11077]
:POSTROUTING ACCEPT [11:836]
:OUTPUT ACCEPT [7:552]
-A POSTROUTING -s 100.100.100.0/255.255.255.0 -j SNAT --to-source 10.10.10.1
COMMIT
# Completed on Tue Sep 15 09:38:29 2009
# Generated by iptables-save v1.3.6 on Tue Sep 15 09:38:29 2009
*filter
:INPUT ACCEPT [3:252]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9:756]
-A INPUT -i lo -j ACCEPT
-A INPUT -i ppp+ -j ACCEPT
-A INPUT -s 100.100.100.0/255.255.255.0 -i eth0 -j ACCEPT
-A INPUT -s 200.200.200.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -s 200.200.200.0/255.255.255.0 -i eth0 -p udp -m udp --dport 1723 -j ACCEPT
-A INPUT -s 200.200.200.0/255.255.255.0 -i eth0 -p gre -j ACCEPT
-A INPUT -i eth0 -j DROP
-A FORWARD -i ppp+ -j ACCEPT
-A FORWARD -d 100.100.100.0/255.255.255.0 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o ppp+ -j ACCEPT
-A OUTPUT -d 200.200.200.0/255.255.255.0 -o eth0 -p tcp -m tcp --sport 1723 -j ACCEPT
-A OUTPUT -d 200.200.200.0/255.255.255.0 -o eth0 -p udp -m udp --sport 1723 -j ACCEPT
-A OUTPUT -d 200.200.200.0/255.255.255.0 -o eth0 -p gre -j ACCEPT
-A OUTPUT -o eth0 -j DROP
COMMIT
# Completed on Tue Sep 15 09:38:29 2009
[/codebox]
Идея проста: dhcpd раздает адреса клиентам в сети из диапазона 200.200.200.10-250
Далее клиент создает ppp-туннель, получая адрес из диапазона 100.100.100.10-250
Правила INPUT OUTPUT работают, как требуется: ограничивают доступ по eth0 только для установления ppp-соединения, а для ppp-туннелей разрешают.
Не работает только FORWARD POSTROUTING - с клиента не пингуется ни eth0(10.10.10.10), ни адсл(10.10.10.1)