第2步:
route add –net 192.168.10.0 netmask 255.255.255.0 gw 10.10.10.1
本步添加路由,到192.168.10.0/24网段的数据要经过vpn1网口上的10.10.10.1。
第3步:
iptables –t nat –A POSTROUTING –s 192.168.1.60 –d 192.168.10.60 –j SNAT –-to 192.168.20.60
在Linux路由器2上创建SNAT规则,如果目标IP地址为192.168.10.60,将其源IP地址由192.168.1.60映射成192.168.20.60.
第4步:
iptables –t nat –A PREROUTING –d 192.168.20.60 –j DNAT –-to 192.168.1.60
在Linux路由器2上创建DNAT规则,如果到达的包目标IP为192.168.20.60,将其发到192.168.1.60.
配置完成。看看两边工作是否正常。
总部的数据库服务器向分部的数据库服务器发送一个包,它认为要发到192.168.20.60.既然192.168.20.60不与192.168.1.60直连,包被转发到默认网关Linux路由器1上。Linux路由器1先检查PREROUTING链,未发现命中规则;接着查找到192.168.20.60的路由,发现最好的路由就是经过在网口vpn1上的10.10.10.2. 现在,Linux路由器1检查POSTROUTING链,发现命中的规则说:要把每个由192.168.1.60发到192.168.20.60的包的源IP地址改成192.168.10.60. 处理之后,按照ip_conntrack服务器将保存一条该连接的记录。改变了源IP地址的该包按照路由表,通过网口vpn1上的10.10.10.2转发出去。
现在,包到达分部的Linux路由器2,它首先查找其PREROUTING链,命中的规则说:如果包的目标为192.168.20.60,要将其改为192.168.1.60. 改写之后,Linux路由器2在其路由表中查找192.168.1.60,发现就直接连在其eth0网口上。再分析POSTROUTING链,没发现命中的规则,Linux路由器2将该发转发到192.168.1.60,看起来该包好像来自192.168.10.60一样。
对行的包也经历同样的步骤。这时我们可以说:“任务完成!”
用iptables实现Packet Mangling
mangling(伪装)可能误导人们认为它是恶意的——伪装包并非如此。伪装包即在路由过程之前或之后故意改变IP包头部的数据。
在伪装表里,并非IP包头部的所有字段都能修改,也不必要。
让我们回顾一下IP包的头部:
之前我们讨论过NAT,在那能伪装包头部的的源IP地址和目标IP地址,这种伪装仅为NAT过程的一部分。
使用netfilter的伪装表,我们能修改如下两个字段:
● TOS:Type Of Service字段,8比特
● TTL:Time To Live字段,8比特
iptables还能在IP包做上标记,由iproute2内部使用,可以用tc处理源路由或QoS。此内部标志,被称为nfmark(netfilter mark),不会改变任一IP包头部的字段。可以iptables的MARK目标设置nfmark,对应有三个选项:
# iptables -j MARK --help
… some lines missing …
MARK target v1.3.1 options:
--set-mark value Set nfmark value
--and-mark value Binary AND the nfmark with value
--or-mark value Binary OR the nfmark with value
… some lines missing …
MARK target v1.3.1 options:
--set-mark value Set nfmark value
--and-mark value Binary AND the nfmark with value
--or-mark value Binary OR the nfmark with value
0 comment(s)



2008/07/14 15:01 ..by
内文分页: 
