最近几天在一直搞一个网关的配置,总是达不到自己的效果,今天终于搞定了。
回想这几天的工作,感触比较多。
先是对于iptables的PREROUTING和POSTROUTING理解不是很好,在前天晚上,猛然想清楚了。
PREROUTING链是所有数据经过网关的第一条链。之后,路由器就会根据目的地址来判断这个数据包的流向。要么流向INPUT链,要么流向FORWARD链。
最后数据包经过POSTROUTING链,流出路由器。
SNAT做源网络地址转换,
DNAT做目的网络地址转换。
SNAT在内网的数据包经过路由器的时候,会进入FORWARD链,再进行数据包的转发。我们要在POSTROUTING链上进行SNAT的处理,主要是修改数据包的源地址,使数据包的地址从内网的保留地址转换为网关的外部真实ip地址。
如果我们在PREROUTING链就做了SNAT处理的话,那么路由器就会将这个内网计算机传来的数据包的ip改为本机的ip,这么数据包在进行转向判断的时候,就会将这个数据包,转向INPUT链,进行本机处理。
内网的数据包就这样终结了它的生命周期,没有出去局域网。
同样的话。再看一下DNAT。
DNAT可以做端口映射,它工作在PREROUTING链上,当数据包从外网到达路由器,进行PREROUTING链。在PREROUTING链上,修改数据包的目的ip地址,将网关的外部ip修改为局域网的内部ip。再进入FORWARD链,将数据包转发到局域网上,到达指定的局域网内部的计算机。
如果我们在PREROUTING链上不进行DNAT的处理的话,而在POSTROUTING链上进行处理,那么路由器在判断数据包流向的时候,就会将这个数据包送入INPUT链,从而进行本机处理,不会将数据包进行转发。
在配置的过程中,我还犯了一个极大的错误,也不能算是错误,可以说是自己比较傻,
直接抄的原来的路由器上的配置,再进行的修改。
原来的iptables的配置里面将INPUT链和OUTPUT链都DROP掉了。我说怎么连都连不出去。这个问题困要了我一个晚上。晕!
应该早找一台机子设置网关来测试一下,省得我一直在服务器上进行测试。
过后想想的话,将INOUT链和OUTPUT链都DROP掉,只保留FORWARD链的话。外部的任何攻击都是无能为力的。因为没有数据包被进入计算机内部进行处理,绝对的安全。
最后是关于网卡的问题。
网关至少要有两个网络接口,这里是“网络接口”,不是“网卡”。可以是虚拟的网卡。
一个用来链接外网,一个用来链接内网。
链接外网的网络接口,要把网关设置成为网络
运营商提供的网关。
链接内网的网络接口的设置,在网关上可以不填。
阅读(1300) | 评论(0) | 转发(0) |