IF_VLAN_40=eth2.40
IP_VLAN_40=10.10.40.100
IP_HOST=10.10.40.10
NET_VLAN_40=10.10.40.0/24IF_LOCAL=eth1
IP_LOCAL=192.168.0.1
NET_LOCAL=192.168.0.0/24
EXT_IF=eth0
EXT_IP=200.200.200.200
EXT_GW=200.200.200.199
route add default gw $EXT_GW
# route to net 10.40.40.0/24
route add -net 10.10.40.0 netmask 255.255.255.0 gw $IP_VLAN_40
# add route to switch
route add -net 10.90.90.0 netmask 255.255.255.0 gw $IP_VLAN_40
# forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables
${IPT} -F
${IPT} -Z
${IPT} -X
${IPT} -t nat -F
${IPT} -t mangle -F
${IPT} -A INPUT -j ACCEPT
${IPT} -A OUTPUT -j ACCEPT
# ***************************************************************
# forward
${IPT} -A FORWARD -i $IF_VLAN_40 -s $IP_HOST -j ACCEPT
${IPT} -A FORWARD -o $IF_VLAN_40 -d $IP_HOST -j ACCEPT
${IPT} -A FORWARD -i $IF_VLAN_40 -o $IF_LOCAL -j ACCEPT
${IPT} -A FORWARD -i $IF_LOCAL -o $IF_VLAN_40 -j ACCEPT
${IPT} -A FORWARD -i $IF_LOCAL -s $NET_LOCAL -o $EXT_IF -d 0/0 -j ACCEPT
${IPT} -A FORWARD -o $IF_LOCAL -d $NET_LOCAL -i $EXT_IF -s 0/0 -j ACCEPT
${IPT} -A FORWARD -j DROP
${IPT} -t nat -A POSTROUTING -o $EXT_IF -j SNAT --to-source $EXT_IP
${IPT} -t nat -A POSTROUTING -o $IF_VLAN_40 -j SNAT --to-source $IP_VLAN_40
Пакеты проходят на роутере в обе стороны
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
299 26637 ACCEPT all -- eth2.40 * 10.10.40.23 0.0.0.0/0
217 86155 ACCEPT all -- * eth2.40 0.0.0.0/0 10.10.40.23
0 0 ACCEPT all -- eth2.40 eth1 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- eth1 eth2.40 0.0.0.0/0 0.0.0.0/0
4440 359335 ACCEPT all -- eth1 eth0 192.168.0.0/24 0.0.0.0/0
7372 9773707 ACCEPT all -- eth0 eth1 0.0.0.0/0 192.168.0.0/24
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Мне кажется они теряются на обратном пути - пакет не знает куда идти, когда он пришел снаружи