SNAT / DNAT 自定义链

本文详细介绍了Linux系统中的NAT(网络地址转换)技术,包括SNAT(源NAT)和DNAT(目的NAT)的实现原理、应用场景、转换前提条件以及iptables配置方法。重点展示了SNAT和DNAT如何处理内网访问外网和外网访问内网的需求。
摘要由CSDN通过智能技术生成

目录

linux 系统本身是没有转发功能,只有路由发送数据

NAT

NAT的实现分为两类

SNAT

SNAT 应用环境

SNAT 原理

SNAT 转换前提条件

例图参考

开启 SNAT 命令

临时开启

永久开启

修改 iptables 网卡

DNAT

DNAT 应用环境

DNAT 原理

DNAT 转换前提条件

例图参考

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

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

在内网上配置

在网关服务器添加 iptables 规则

测试外网是否能访问内网


linux 系统本身是没有转发功能,只有路由发送数据

NAT

—— PREROUTING

路由判断前

—— INPUT

进入本机的流量

—— OUTPUT

出本机的流量

—— POSTROUTING

路由判断后

NAT的实现分为两类

—— SNAT:source NAT ,支持 POSTROUTING , INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改 源IP ;让内网可以访问外网

—— DNAT:destination NAT ,支持 PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改 目标IP ;让外网可以访问到内网的机器

SNAT

SNAT 应用环境

局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由

SNAT 原理

源地址转换

修改数据包的源地址

SNAT 转换前提条件

局域网各主机已正确设置IP地址、子网掩码、默认网关地址

Linux网关开启IP路由转发

例图参考

开启 SNAT 命令
临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
或
sysctl -W net.ipv4.ip_forward=1

永久开启
[root@localhost network-scripts]# sysctl -a|grep "ip_forward"
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens32.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0
​
vim /etc/ sysctl. conf 
#打开配置文件
net. ipv4.ip_ forward = 1               
#将此行写入配置文件任意空行之中
​
sysctl -P
#读取修改后的配置

修改 iptables 网卡
SNAT 转换1:固定的公网ip地址
​
iptables -t nat -A POSTROUTING  -s  12.0.0.0/24  -o ens33 -j SNAT --to 192.168.91.101
#交给网关
​
iptables -t nat -A POSTROUTING -s  12.0.0.0/24 -o ens37 -j SNAT --to 192.168.91.101~192.168.91.103
#内网地址     出站网卡       外网ip或地址池
​
​
SNAT 转换2:非固定的公网ip地址
​
iptables -t nat -A POSTROUTING -s 12.0.0.0/24 -d 192.168.100.0/24 -j MASQUERADE
​
iptables -t nat -A POSTROUTING -s  192.168.100.0/24 -o ens37 -j MASQUERADE
​
​

DNAT

DNAT 应用环境

在Internet中发布位于局域网内的服务器

DNAT 原理

修改数据包的目的地址

DNAT 转换前提条件
  1. 局域网的服务器能够访问Internet

  2. 网关的外网地址有正确的DNS解析记录

  3. Linux网关开启IP路由转发

vim /etc/ sysctl. conf 
#打开配置文件
net. ipv4.ip_ forward = 1               
#将此行写入配置文件任意空行之中
​
sysctl -P
#读取修改后的配置

例图参考

DNAT 转换1: 发布内网的 Web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.100.102
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80 -j DNAT --to 192.168.100.102
​
​
#或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80-j DNAT --to-destination 192.168.100.102
                             #入站|外网网卡 | 外网ip                            内网服务器ip

DNAT 转换2: 发布时修改目标端口
#发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
iptables-t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 250-jDNAT --to 192.168.100.102:22

在内网上配置
#在内网上安装 httpd并开启服务
[root@localhost yum.repos.d]# yum install -y httpd
[root@localhost yum.repos.d]# systemctl start httpd
 
#关闭防火墙和安全终端
[root@localhost yum.repos.d]# systemctl stop firewalld.service 
[root@localhost yum.repos.d]# setenforce 0

在网关服务器添加 iptables 规则
#先清空规则
[root@localhost yum.repos.d]#iptables -F -t nat
​
#添加规则
[root@localhost yum.repos.d]#iptables -t nat -A PREROUTING -i ens38 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.102
 
#查看规则
[root@localhost yum.repos.d]#iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            12.0.0.1             tcp dpt:80 to:192.168.100.102
 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
 
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination    
​

测试外网是否能访问内网
#在外网服务器上
[root@localhost ~]# curl 12.0.0.1
​
#在内网服务器上
[root@localhost yum.repos.d]# tail /etc/httpd/logs/access_log 
127.0.0.1 - - [02/Nov/2021:18:05:31 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值