|
发表于 2007-6-23 19:41:40
|
显示全部楼层
两块网卡iptable数据包的流向
Post by Chowroc
对,我知道,-i 只能与 PREROUTING 配合,-o 只能与 POSTROUTING 配合。POSTROUTING 还可以与 -s IP/MASK 配合:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
or:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
我写的测试脚本,用 LOG 选项记录到 /var/log/message 中:
- #!/bin/bash
- iptables -F
- /sbin/modprobe ipt_MASQUERADE
- /sbin/modprobe iptable_nat
- /sbin/modprobe ipt_LOG
- /sbin/modprobe ip_conntrack
- # iptables -P INPUT -j ACCEPT
- # iptables -P FORWARD -j ACCEPT
- # iptables -P OUTPUT -j ACCEPT
- iptables -t nat -A PREROUTING -i eth0 -j LOG --log-level 0 --log-prefix "PREROUTING_i_eth0: "
- # iptables -t nat -A PREROUTING -o eth0 -j LOG --log-prefix "PREROUTING_o_eth0: "
- iptables -A FORWARD -i eth0 -j LOG --log-level 0 --log-prefix "FORWARD_i_eth0: "
- iptables -A FORWARD -o eth0 -j LOG --log-level 0 --log-prefix "FORWARD_o_eth0: "
- # iptables -t nat -A POSTROUTING -i eth0 -j LOG --log-prefix "POSTROUTING_i_eth0: "
- iptables -t nat -A POSTROUTING -o eth0 -j LOG --log-level 0 --log-prefix "POSTROUTING_o_eth0: "
- iptables -t nat -A PREROUTING -i ppp0 -j LOG --log-level 0 --log-prefix "PREROUTING_i_ppp0: "
- # iptables -t nat -A PREROUTING -o ppp0 -j LOG --log-prefix "PREROUTING_0_ppp0: "
- iptables -A FORWARD -i ppp0 -j LOG --log-level 0 --log-prefix "FORWARD_i_ppp0: "
- iptables -A FORWARD -o ppp0 -j LOG --log-level 0 --log-prefix "FORWARD_o_ppp0: "
- # iptables -t nat -A POSTROUTING -i ppp0 -j LOG --log-prefix "POSTROUTING_i_ppp0: "
- iptables -t nat -A POSTROUTING -o ppp0 -j LOG --log-level 0 --log-prefix "POSTROUTING_o_ppp0: "
- iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
- echo 1 > /proc/sys/net/ipv4/ip_forward
- iptables -A INPUT -j ACCEPT
- iptables -A FORWARD -j ACCEPT
- iptables -A OUTPUT -j ACCEPT
复制代码
通过查看 message 文件中的记录,我的结论是,使用 eth0 + ppp0 的 ADSL 共享上网,内网请求 Internet 服务,经过:
LAN ---> eth0(PREROUTING) ---> 路由算法 ---> eth0(FORWARD) ---> ppp0(FORWARD) ---> ppp0(POSTROUTING: NAT) ---> Internet
没有eth0(POSTROUTING) 和 ppp0(PREROUTING) 的环节。
而 Internet 服务返回的数据,只经过 eth0(FORWARD) 和 ppp0(FORWARDE)──我通过看到的记录只能得出这样的结论。
我不知道两块网卡共享上网的情况,以及使用两块网卡进行 ADSL 共享上网的情况,故有此问。
不知那位兄台能帮助测一测?作为一种研究和学习。
谢谢。
**************************************************************
最近研究两块网卡iptable中的数据包流程,有些地方感到迷惑(其实就是数据包的具体流程不确定)。经过我几次尝试以后,得到了和兄台一样的结论“LAN ---> eth0(PREROUTING) ---> 路由算法 ---> eth0(FORWARD) ---> ppp0(FORWARD) ---> ppp0(POSTROUTING: NAT) ---> Internet
没有eth0(POSTROUTING) 和 ppp0(PREROUTING) 的环节”
我的实验环境是RHEL AS 4 ,eth1是内网网卡,eth0是公网网卡。
下面是步骤:
1 设置 :-A PREROUTING -i eth1 -j DROP
现象 :客户端不能上网。
结论 : 数据包走(肯定走,因为是第一次嘛)内网eth1的PREROUTING链,设置DROP后就被DROP掉了。
2 设置 :-A POSTROUTING -o eth1 -j DROP
现象 : 客户端依然能上网,没有受到影响。
结论 :数据包没有走内网eth1的POSTROUTING链。
3 设置 : -A PREROUTING -i eth0 -j DROP
现象 :客户端仍然能上网,没有受到影响。
结论 :数据包没有走外网eth0的 PREROUTING 链。
由此得到结论,和楼主的一致。但我开始没有做log,所以看到这个结果心里很是疑惑,不过看到楼主的结论和我的一样。总算对两块网卡中iptables数据包流向有点明白了。呵呵。 |
|