目录
一、SNAT DNAT 介绍
SNAT(Source Network Address Translation)和 DNAT(Destination Network Address Translation)是 Linux iptables 防火墙中的两种网络地址转换技术,用于在网络数据包传输过程中修改源地址和目标地址。它们在网络环境中起到重要作用,允许在不同网络中进行网络通信,并提供网络安全和负载均衡等功能。
SNAT(Source NAT):
SNAT 是一种将源 IP 地址和端口号转换为不同地址和端口的技术。当网络中的内部设备(例如私有 IP 地址)需要访问外部网络(例如公共互联网)时,SNAT 可以用于将内部设备的源地址转换为一个公共 IP 地址。这使得外部服务器返回的数据包能够正确路由回内部网络。
典型的用例包括多台内部主机通过一个公共 IP 地址访问互联网,例如局域网中的多台计算机共享一个公共 IP 地址。
DNAT(Destination NAT):
DNAT 是一种将目标 IP 地址和端口号转换为不同地址和端口的技术。当外部网络中的数据包需要访问内部网络时,DNAT 可以用于将外部请求的目标地址转换为内部网络中的目标地址,以确保数据包被正确路由到内部服务器。
典型的用例包括将外部网络请求的流量引导到内部的服务器,例如将公共 IP 地址上的访问映射到局域网中的特定服务器。
二、SNAT策略的配置
2.1 前期准备
1.开启linux路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #将此行写入配置文件
sysctl -p #读取修改后的配置
2.配置好虚拟机ip地址网关等
2.2 各主机网络配置
外网主机1
网关服务器 ens33
ens36
http服务器:
2.3配置SNAT
要想内网终端访问公网就需要配置SNAT
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens36 -j SNAT --to 15.1.2.1
或
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens36 -j MASQUERADE
#如果地址不固定可以设置
#-t nat:指定使用 NAT 表,NAT 表用于网络地址转换。
#-A POSTROUTING:将规则添加到 POSTROUTING 链,这是出站数据包离开网络接口之前应用的链。
#-s 192.168.2.0/24:指定源地址为 192.168.2.0/24 子网的数据包。
#-o ens36:指定输出接口为 ens36,表示出站数据包将通过 ens36 接口发送。
#-j SNAT:表示将执行 SNAT(源地址网络转换)。
#--to 15.1.2.1:指定转换后的源 IP 地址为 15.1.2.1。
可以去访问15.1.2.100 外网http服务器查看是否成功
访问成功
三、DNAT 策略的配置
3.1 配置DNAT
iptables -t nat -A PREROUTING -i ens36 -d 15.1.2.1 -p tcp --dport 80 -j DNAT --to 192.168.2.102
-t nat:指定使用 NAT 表,NAT 表用于网络地址转换。
-A PREROUTING:将规则添加到 PREROUTING 链,这是入站数据包到达网络接口之前应用的链。
-i ens36:指定输入接口为 ens36,表示入站数据包将通过 ens36 接口接收。
-d 15.1.2.1:指定目标地址为 15.1.2.1,表示目标 IP 地址为 15.1.2.1 的数据包将受到影响。
-p tcp:指定协议为 TCP。
--dport 80:指定目标端口为 80,表示目标端口为 80 的数据包将受到影响。
-j DNAT:表示将执行 DNAT(目标地址网络转换)。
--to 192.168.2.102:指定转换后的目标 IP 地址为 192.168.2.102。
这使得外网能访问内网http服务器向外提供服务
看外网客户端是否能访问服务器