linux 防火墙之nat表

来源:互联网 发布:网络爬虫是干嘛的 编辑:程序博客网 时间:2024/06/07 16:44

NAT表,作用是对网络地址进行转换,主要有两个功能:1. DNAT 网络目的地址转换; 2. SNAT 网络源地址转换。

这里有两个应用场景便于理解NAT表的两个功能:

1.公司里有几台服务器需要对外提供服务,但公司只有一个外网ip地址,怎么让几台服务器共用一个ip地址?

2.家庭里很手机、电脑等设备,一般会通过wifi连到路由器上,然后上外网,仔细推敲下手机电脑获取的是路由器分配的内网ip,而内网ip是不能在外网里传播的,路由器是如何实现让多台设备冲浪的?


针对情景1,防火墙的网络目的地址转换功能就能够实现。 取出一台设备,其必须具备两个网络接口以上,一个网络接口绑定外网ip地址,其它的网路接口用来保证能在链路上访问所有的服务器。如有个数据包访问该ip的a端口,则将这个数据包的头部的地址 + 端口改成 服务器A的ip和端口,然后通过路由表或其它途径使这个数据包进入到服务器A所在的网络环境中,使访问生效。同理可做映射使访问该外网ip的b、c端口访问到B、C服务器。

此处要有图。。。。

。。。。。。。

。。。。。。



对应的iptables命令如下:iptables -A PREROUTING -i eth0 -p tcp --dport 8888 -j DNAT --to-destination 192.168.0.120:9999

简单解释:

iptables -A 链: 对某条链增加一条规则。

-i eth0 : 指定进来的网络接口,此处为eth0

-p tcp : 指定协议,可以是udp,或tcp。

-dport 8888 : 数据包访问的目的端口

-j DNAT : -j 后是接受、拒绝、丢弃,或其它处理,此处是交给DNAT功能去处理

--to-destination 192.168.0.120:9999 : DNAT 将数据包要访问的地址和端口改为 192.168.0.120:9999。

综合起来考量即是 从eth0 进来,访问8888端口的数据包,将它的目的地址改成192.168.0.120,目的端口改为9999,之后通过路由表去路由。


针对情景2,如果是linux路由器,会这么做:当内网设备A通过路由器上外网,数据包跑到路由器那一瞬间,就把数据包的源地址和端口替换成路由器对外的那个ip和随机分配一个端口,这样数据包就能出去了;同时路由器会记住这个随机分配的端口,与设备A进行关联,如果有数据包回到这个端口,则将它返回给设备A。

此处要有图。。。。。。。

。。。。。。。。。。。

。。。。。。。。。。。。



对应的iptables命令是:  iptables -A POSTROUTING -o eth0 -j MASQUERADE

简单解释:

-o eth0: 匹配所有要从eth0出去的数据

-j MASQUERADE : 将数据包的源地址转化成 eth0 的地址。

综合起来考量就是: 凡是即将要从eth0 出去的地址,都被伪装成eth0的ip地址出去访问外部网络。


待续。

原创粉丝点击