linux防火墙iptables之SNAT与DNAT

200 阅读3分钟

一.snat

1.snat原理和作用

NAT策略的原理:

  • 源地址转换,Source Network Address Translation
  • 修改数据包的源地址

SNAT源地址转换过程:

  • 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。

  • 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。

  • 当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。

2.SNAT策略的配置

SNAT转换前提条件

  1. 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
  2. Linux网关开启IP路由转发

2.1Linux网关开启IP路由转发

临时开启:sysctl -w net.ipv4.ip_forward=1

永久开启:

vim /etc/sysctl.conf  

net.ipv4.ip_forward=1    #将此行写入配置文件

sysctl -p     #读取修改后的配置,优化内核调优

2.2 SNAT转换1:固定的公网IP地址

微信截图_20230820202925.png

  • -A POSTROUTING 指定POSTROUTING链  

  • -s 192.168.72.0/24 源地址所处的网段(内网IP)  

  • -o ens33 出站网卡

  • -j SNAT  

  • --to 12.0.0.2   外网IP  

  • --to-source 12.0.0.2-12.0.0.10   外网地址池

2.3 SNAT转换2:非固定的公网IP地址(共享动态IP地址)

微信截图_20230820203249.png

二.DNAT原理及应用

1.DNAT策略的原理

  • 目标地址转换,Destination Network Address Translation

  • 修改数据包的目标地址

2.DNAT源地址转换过程:

  • 数据包从外网发送到内网时,DNAT会把数据包的目标地址由公网IP转换成私网IP。

  • 当相应的数据包从内网发送到公网时,会把数据包的源地址由私网IP转换为公网IP。

注:

  • 客户机想访问服务器时,访问的是网关地址,由网关去找服务器的内网地址。

  • 如果多台服务器使用同一个网关,那么通过不同的端口号来对应不同的服务器。

3.DNAT转换前提条件

  1. 局域网的服务器能够访问Internet
  2. 网关的外网地址有正确的DNS解析记录
  3. Linux网关开启IP路由转发

vim /etc/sysctl.conf

net.ipv4.ip_forward=1    #将此行写入配置文件  ​  

sysctl -p     #读取修改后的配置

4.DNAT转换1:发布内网的Web服务

微信截图_20230820204048.png

  • -A PREROUTING       //修改目标地址的链          

  • -i ens33             //入站网卡  

  • -d 12.0.0.254       //数据包的目的地址

  • -p tcp --dport 80   //数据包的目的端口  

  • -j DNAT             //使用DNAT功能

  • --to //内网服务器IP

5.DNAT转换2:发布时修改目标端口

将公网的IP和端口,转换成内网的IP和端口

发布局域网内部的web服务器,外网主机需使用8080端口进行连接

将12.0.0.254:8080 转换成 192.168.37.10:80

微信截图_20230820204425.png

发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接

  • 将12.0.0.254:250 转换成 192.168.37.10:22

微信截图_20230820204605.png

三.REDIRECT转发

REDIRECT,是NAT表的 target,通过改变目标IP和端口,将接受的包转发至同一个主机的不同端口,可用于PREROUTING OUTPUT链

REDIRECT选项:

--to-ports port[-port] 注意: 无需开启 ip_forward

举例:

微信截图_20230820205130.png

四.小结

SNAT源地址转换过程(针对客户端):

  • 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
  • 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
  • 当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。

DNAT源地址转换过程(针对服务器):

  • 数据包从外网发送到内网时,DNAT会把数据包的目标地址由公网IP转换成私网IP。

  • 当相应的数据包从内网发送到公网时,会把数据包的源地址由私网IP转换为公网IP。

  • 客户机想访问服务器时,访问的是网关地址,由网关去找服务器的内网地址。

  • 如果多台服务器使用同一个网关,那么通过不同的端口号来对应不同的服务器。