iptables实现路由转发

使用linux的iptables进行局域网与广域网的路由转发,文中实现的是IP替换。由于一般PC只有单有线网卡,所以在VMware下使用虚拟网卡实现该功能的实验。

其步骤如下:

1.     设计整个网络拓扑如下:

 iptables实现路由转发_第1张图片

2.     在Vmware中选择建立相应的交换机,并分配相应的子网IP和NetMask

 iptables实现路由转发_第2张图片

3.     为Linux系统添加两个虚拟网卡,一个连接外网,一个连接局域网

iptables实现路由转发_第3张图片

4.     为WinXp系统添加一个虚拟网卡,连接到局域网交换机VMnet2上,这样就实现了设计的网络拓扑结构

iptables实现路由转发_第4张图片

5.     启动Linux虚拟机,使用ifconfig获得网卡的相关信息。

iptables实现路由转发_第5张图片

6.     启动WinXp的虚拟系统,将其网络连接的IP设为192.168.226.200,网关设为linux的网络IP即 192.168.129(确保其使用linux虚拟系统作为路由),DNS服务器设为广域网的DNS服务器,即202.38.64.56

iptables实现路由转发_第6张图片

7.     在linux下netfilter的结构如下:

iptables实现路由转发_第7张图片

如果要实现包的转发,必须将相应的策略加入到FORWARD链中,同时修改/etc/sysctl.conf中关于转发的设置:net.ipv4.ip_forwarding=1net.ipv6.conf.all.forwarding=1 同时也要将相应的转发策略加入到nat模块中的PREROUTING和POSTROUTING链中。使用如下的脚本进行相关策略的添加:

IPT="iptables"
ROUTER="114.214.166.175"
PC1="192.168.226.200"

sudo $IPT -A FORWARD -i eth1 -s $PC1 -j ACCEPT
sudo $IPT -A FORWARD -i eth0 -d $PC1 -j ACCEPT
sudo $IPT -t nat -A POSTROUTING -i eth0 -s $PC1 -j SNAT --to $ROUTER
sudo $IPT -t nat -A PREROUTING -o eth0 -d $ROUTER -j DNAT --to $PC1


8.     执行上诉的脚本文件即可实现策略的添加,在WinXp上即可访问外部网络。这就实现了实验目的中的使用LINUX上iptables进行路由转发。


实验结果及分析:

在实验中已经实现了局域网的路由转发功能

使用Wireshark抓包分析:


针对上面的一个DNS查询,可以看到,192.168.226.200即局域网的机器首先发送一个查询包,包的src为192.168.226.200 dest为202.38.64.56,在经过局域网的网关时,在FORWARD链中允许其转发,在POSTROUTING中将该包的src修改成114.214.166.175,然后发送到外网中,查询的response包中src为202.38.64.56 dest为114.214.166.175,在经过netfilter中nat的PREROUTING时,将包的dest改为192.168.226.200,然后netfilter将按照filter的FORWARD链中规则,允许转发到dest中,这样就实现了子网中一个DNS的查询。很明显,这种转发会影响整个系统的速度。

你可能感兴趣的:(Linux网络防火墙,iptables,netfilter,路由转发)