通过iptables实现数据包转发

实验环境:

系统:centos6.2  linux2.6

vmware虚拟环境测试


有A、B、C三台机器

A有一个块网卡: eth1:1923168.66.225

B一个网卡:eth0:192.168.66.10

C一个网卡:eth0:192.168.66.11

由于某种需要,我希望B能将数据包发给C,但是又不能直接发送,而A又能与B、C交互数据包,此时,我就希望,B将数据包给A,然后A再把数据包,转发给C,与此同时,A要将转发的数据包的目的地址改成 B,那么当C收到A转发过来的包时,就像是B直接发给C的一样

可以用 netflter/iptables

对A进行配置:

$ iptables -t filter -A FORWARD -o eth1 -p tcp -j ACCEPT   #将A能够转发数据包
$ iptables -t filter -A FORWARD -i eth1 -p tcp -j ACCEPT   
#将进入路由前的数据的目的IP改成 C的IP ,端口号可以根据自己的情况来,我用的8080
$ iptables -t nat  -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.66.10:8080   
#将要转发的数据包的源IP改成A 的IP
$ iptables -t nat -A POSTROUTING -d 192.168.66.10 -p tcp -m tcp --dport 8080 -j SNAT --to-source 192.168.66.11

还有一个千别忘了, 开启Linux双网卡的转发功能

如果要让包转发功能在系统启动以后自动生效,需要修改/etc/sysctl.conf文件,添加一行: 

   # Controls IP packet forwarding
    net.ipv4.ip_forward = 1

之后,就可以写一个应用程序测试了,用tcpdump在C主机上抓包

实验参考:

如何开启Linux双网卡的转发功能
http://blog.chinaunix.net/uid-24172143-id-2049790.html
iptables端口转发
http://meridian.dyndns.org/any.thing/d04.html
FORWARD 和  NAT  规则
http://man.chinaunix.net/linux/redhat/rhel-sg-zh_cn-4/s1-firewall-ipt-fwd.html



你可能感兴趣的:(通过iptables实现数据包转发)