iproute的功能是对ip数据报文的来源地址,目的地址进行分析,必要的时候可以让不同的数据报文走不同的路由;
iptables是一个包伪装的实现,其中包括源地址伪装,目的地址伪装,端口转发等功能
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。
iptables SNAT和DNAT的理解
图中正菱形的区域是对数据包进行判定转发的地方。在这里,系统会根据IP数据包中的destination ip address中的IP地址对数据包进行分发。
如果destination ip address是本机地址,数据将会被转交给INPUT链。如果不是本机地址,则要交给FORWARD链检测。
PREROUTING是路由前匹配的链,PREROUTING一般用于做目的地址转换(DNAT)
把访问202.103.96.112的访问转发到192.168.0.112
iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112
POSTROUTING是路由后匹配的链,POSTROUTING一般用于做源地址转换(SNAT)
流出本机的数据的source ip address修改成58.20.51.66
iptables -t nat -A POSTROUTING -s 192.168.0.112 -j SNAT --to-source 58.20.51.66
# 允许IP转发
echo "1" > /proc/sys/net/ipv4/ip_forward
设置双网卡静态路由表
route add -net 192.168.101.0 netmask 255.255.255.0 dev eth0
route add -net 192.168.100.0 netmask 255.255.255.0 dev eth1
#eth0 设置多个ip地址
ifconfig eth0 add "内网网卡IP" netmask "内网掩码"
#将内网数据转发到外网
iptables -t nat -A PREROUTING -d "内网网卡IP" -j DNAT --to "外网目的主机IP"
iptables -t nat -A POSTROUTING -s "内网网段或内网IP" -o eth0 -j SNAT --to "NAT IP"(访问外网时将源IP改成NAT地址)
查看iptable
//--line-number可以显示规则序号
查看filter
iptables -L -n --line-number
查看nat
iptables -t nat -vnL POSTROUTING --line-number
删除iptables规则
iptables -D INPUT 3 //删除input的第3条规则
iptables -F INPUT //清空 filter表INPUT所有规则
//清空所有规则
iptables -F
iptables -t nat -F POSTROUTING //清空nat表POSTROUTING所有规则
iptables -t nat -D POSTROUTING 1 //删除nat表中postrouting的第一条规则
#等价形式
iptables -t nat -A POSTROUTING -s 192.168.101.0/24 -o eth0 -j MASQUERADE