最近在学习网络技术时,我对内外网互联的实际应用非常感兴趣,尤其是如何通过 SNAT 和 DNAT 来解决内网访问外网和外网访问内网的问题。为了更好地理解这些概念,我决定亲自动手搭建一个实验环境。这个过程既充满挑战,也让我收获满满。如果你也对网络技术感兴趣或者正在学习 NAT 技术,那么这篇文章一定会对你有所帮助!
实验步骤:
1.内网搭建httpd服务器:访问内容 smqnz.com2024...
2.外网搭建httpd服务器:访问内容 waiwang
3.网关服务器:两块网卡 开启路由转发 并且设置相应的SNAT 和 DNAT
# 配置网卡
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
配置内容:
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
# 重启网络服务
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
# 配置网卡
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
配置内容:
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.15.150
NETMASK=255.255.255.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
# 配置ens33(内网接口)
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
配置内容:
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.14.111
NETMASK=255.255.255.0
# 配置ens36(外网接口)
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens36
配置内容:
TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.15.111
NETMASK=255.255.255.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
# 清除现有规则
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
在内网服务器(192.168.14.112)上执行:
# 测试到外网服务器的连通性
ping 192.168.15.150
# 测试访问外网Web服务
curl http://192.168.15.150
在外网服务器(192.168.15.150)上执行:
# 测试到防火墙的连通性
ping 192.168.15.111
# 测试访问内网Web服务(通过防火墙IP)
curl http://192.168.15.111
通过这次实验,我不仅掌握了 SNAT 和 DNAT 的基本原理,还学会了如何在实际场景中配置和测试这些功能。虽然一开始遇到了一些问题,比如 iptables 规则的顺序和 IP 转发的开启,但最终的成功让我感到非常有成就感。如果你也想尝试,千万别怕出错,动手实践才是最好的学习方式!希望这篇文章能为你提供一些启发和帮助,祝你在网络技术的学习道路上越走越远!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。