前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >一步步搭建内外网互联:SNAT 和 DNAT 实战教程

一步步搭建内外网互联:SNAT 和 DNAT 实战教程

原创
作者头像
神秘泣男子
发布2024-12-29 16:31:28
发布2024-12-29 16:31:28
21200
代码可运行
举报
文章被收录于专栏:LinuxLinux
运行总次数:0
代码可运行

最近在学习网络技术时,我对内外网互联的实际应用非常感兴趣,尤其是如何通过 SNAT 和 DNAT 来解决内网访问外网和外网访问内网的问题。为了更好地理解这些概念,我决定亲自动手搭建一个实验环境。这个过程既充满挑战,也让我收获满满。如果你也对网络技术感兴趣或者正在学习 NAT 技术,那么这篇文章一定会对你有所帮助!

1. SNAT

定义

  • 源地址转换,用于修改数据包的源IP地址
  • 只能用在nat表的POSTROUTING链中

主要应用

  • 局域网共享上网
  • 解决IPv4地址资源不足的问题
  • 内网机器访问外网时,将源地址转换为公网IP

工作原理

  1. 数据包经过路由选择后到达POSTROUTING链
  2. 符合条件的数据包源IP被修改为指定的公网IP
  3. 网关会记录SNAT映射,确保响应数据包能正确返回

2. DNAT

定义

  • 目标地址转换,用于修改数据包的目标IP地址和端口
  • 只能用在nat表的PREROUTING链和OUTPUT链中

主要应用

  • 发布内网服务器到公网
  • 端口转发
  • 负载均衡

工作原理

  1. 外部访问请求到达网关的PREROUTING链
  2. 符合条件的数据包目标IP被修改为内网服务器IP
  3. 网关记录DNAT映射,确保响应数据包能正确返回

实验测试

实验步骤:

1.内网搭建httpd服务器:访问内容 smqnz.com2024...

2.外网搭建httpd服务器:访问内容 waiwang

3.网关服务器:两块网卡 开启路由转发 并且设置相应的SNAT 和 DNAT

完整配置步骤

1. 内网服务器配置(192.168.14.112)

代码语言:javascript
代码运行次数:0
复制
# 配置网卡
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

配置内容:

代码语言:javascript
代码运行次数:0
复制
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.14.112
NETMASK=255.255.255.0
GATEWAY=192.168.14.111
代码语言:javascript
代码运行次数:0
复制
# 重启网络服务
sudo systemctl restart network

# 安装并启动httpd服务(如果需要)
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd

# 创建测试页面
echo "This is Internal Web Server" | sudo tee /var/www/html/index.html

2. 外网服务器配置(192.168.15.150)

代码语言:javascript
代码运行次数:0
复制
# 配置网卡
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

配置内容:

代码语言:javascript
代码运行次数:0
复制
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.15.150
NETMASK=255.255.255.0
代码语言:javascript
代码运行次数:0
复制
# 重启网络服务
sudo systemctl restart network

# 安装并启动httpd服务(如果需要)
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd

# 创建测试页面
echo "This is External Web Server" | sudo tee /var/www/html/index.html

3. 防火墙网关服务器配置(192.168.14.111/192.168.15.111)

3.1 配置网卡
代码语言:javascript
代码运行次数:0
复制
# 配置ens33(内网接口)
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

配置内容:

代码语言:javascript
代码运行次数:0
复制
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.14.111
NETMASK=255.255.255.0
代码语言:javascript
代码运行次数:0
复制
# 配置ens36(外网接口)
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens36

配置内容:

代码语言:javascript
代码运行次数:0
复制
TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.15.111
NETMASK=255.255.255.0
3.2 开启IP转发
代码语言:javascript
代码运行次数:0
复制
# 临时开启IP转发
sudo sysctl -w net.ipv4.ip_forward=1

# 永久开启IP转发
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3.3 配置iptables规则
代码语言:javascript
代码运行次数:0
复制
# 清除现有规则
sudo iptables -F
sudo iptables -t nat -F

# 配置默认策略
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

# 配置SNAT(内网访问外网)
sudo iptables -t nat -A POSTROUTING -s 192.168.14.0/24 -o ens36 -j SNAT --to-source 192.168.15.111

# 配置DNAT(外网访问内网Web服务器)
sudo iptables -t nat -A PREROUTING -i ens36 -p tcp --dport 80 -j DNAT --to-destination 192.168.14.112:80

# 配置转发规则
sudo iptables -A FORWARD -i ens33 -o ens36 -j ACCEPT
sudo iptables -A FORWARD -i ens36 -o ens33 -m state --state ESTABLISHED,RELATED -j ACCEPT

# 保存规则
sudo service iptables save
# 或
sudo iptables-save > /etc/iptables.rules

测试验证

1. 测试内网到外网的连通性

在内网服务器(192.168.14.112)上执行:

代码语言:javascript
代码运行次数:0
复制
# 测试到外网服务器的连通性
ping 192.168.15.150

# 测试访问外网Web服务
curl http://192.168.15.150

2. 测试外网到内网的连通性

在外网服务器(192.168.15.150)上执行:

代码语言:javascript
代码运行次数:0
复制
# 测试到防火墙的连通性
ping 192.168.15.111

# 测试访问内网Web服务(通过防火墙IP)
curl http://192.168.15.111

通过这次实验,我不仅掌握了 SNAT 和 DNAT 的基本原理,还学会了如何在实际场景中配置和测试这些功能。虽然一开始遇到了一些问题,比如 iptables 规则的顺序和 IP 转发的开启,但最终的成功让我感到非常有成就感。如果你也想尝试,千万别怕出错,动手实践才是最好的学习方式!希望这篇文章能为你提供一些启发和帮助,祝你在网络技术的学习道路上越走越远!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. SNAT
    • 定义
    • 主要应用
    • 工作原理
  • 2. DNAT
    • 定义
    • 主要应用
    • 工作原理
  • 实验测试
  • 完整配置步骤
    • 1. 内网服务器配置(192.168.14.112)
    • 2. 外网服务器配置(192.168.15.150)
    • 3. 防火墙网关服务器配置(192.168.14.111/192.168.15.111)
      • 3.1 配置网卡
      • 3.2 开启IP转发
      • 3.3 配置iptables规则
  • 测试验证
    • 1. 测试内网到外网的连通性
    • 2. 测试外网到内网的连通性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档