linux服务器自建snat和dnat

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 为了节省成本,购买了云服务器的时候只买了一个公网IP,但是有多台机器需要实现上网或者是被访问,一个IP只能绑定一个机器,就只能使用NAT网关或者是内网源进行下载,受限较大。

1、问题背景

为了节省成本,购买了云服务器的时候只买了一个公网IP,但是有多台机器需要实现上网或者是被访问,一个IP只能绑定一个机器,就只能使用NAT网关或者是内网源进行下载,受限较大。

2、测试环境

测试环境:阿里云专有网络VPC下的两台服务器,一台有公网,一台没有公网,同内网

系统:linux系统

注:firewalld实现方案需要在红帽系列带有firewalld防火墙管理的系统上操作

3、实现方案

3.1 构建SNAT网络实现无公网机器上网(选用一种就可以)

3.1.1 iptables实现方式

3.1.1.1 创建专有网络并创建新机器

专有网络是:vpc-hp***********yomk 10.0.0.72是有公网的,10.0.0.73是内网机器

如上图,一台服务器是有公网的,一台服务器是没有公网的

3.1.1.2 设置路由表

进入专有网络路由表

添加路由

3.1.1.3 在带有公网的服务器内部设置(内网机器不需要配置)

开启IP转发:

在/etc/sysctl.conf添加net.ipv4.ip_forward = 1,然后执行

sysctl  -p使其生效


iptables -t nat -I POSTROUTING -s VPC的IP段 -j SNAT --to-source  公网IP的ECS内网IP

注:10.0.0.0/8就是内网要上网的机器或者IP段,10.0.0.72就是公网的内网地址


3.1.1.4 测试

此时在没有内网的机器内部测试

3.1.2 firewalld实现方式

先根据3.1.1.1和3.1.1.2设置交换机配置路由表、设置转发。firewalld只是添加转发的规则需要使用富规则

firewalld设置了zone的概念,iptables是主机防火墙,firewalld可以为不同的网卡绑定不同的zone,然后实现访问控制

3.1.2.1、修改网卡的zone

sudo firewall-cmd --permanent --zone=external --change-interface=eth0

执行结果

sudo firewall-cmd --permanent --zone=external --change-interface=eth0

success


3.1.2.2、设置特定 区域的snat-IP伪装

sudo firewall-cmd --zone=external --add-masquerade --permanent


3.1.2.3、设置转发规则

sudo firewall-cmd --zone=external --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" masquerade'

执行结果:

sudo firewall-cmd --zone=external --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" masquerade'

Warning: ALREADY_ENABLED: rule family="ipv4" source address="10.0.0.0/8" masquerade

success

3.1.2.4、重新加载生效

sudo firewall-cmd --reload

3.1.2.5、测试

在内网机器上执行测试

ping -c 4 aliyun.com

PING aliyun.com (140.205.135.3) 56(84) bytes of data.

64 bytes from 220.181.38.251 (140.205.135.3): icmp_seq=1 ttl=52 time=14.1 ms

64 bytes from 220.181.38.251 (140.205.135.3): icmp_seq=2 ttl=52 time=14.0 ms

64 bytes from 220.181.38.251 (140.205.135.3): icmp_seq=3 ttl=52 time=14.0 ms

64 bytes from 220.181.38.251 (140.205.135.3): icmp_seq=4 ttl=52 time=14.0 m

3.2、DNAT实现

3.2.1 iptables实现

3.2.1.1 配置

在公网机器上执行

iptables -t nat -A PREROUTING -d 10.0.0.72 -p tcp --dport 80 -j DNAT --to 10.0.0.73:80

这个指令实现了当客户端访问10.0.0.72所对应的公网的80端口的时候,就会转发到10.0.0.73的80端口,实现访问内部服务


3.2.1.2 测试

3.2.2. firewalld实现

3.2.2.1 配置

1、设置转发规则

firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.0.73 --permanent

[root@ceshi~]# firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.0.73 --permanent

success

2、重载生效

firewall-cmd --reload

[root@ceshi ~]# firewall-cmd --reload

success

3.2.2.2、测试

到此,自建SNAT和DNAT的过程全部结束

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7天前
|
负载均衡 安全 网络安全
|
2天前
|
缓存 Unix Linux
服务器linux!!!
本文介绍了计算机的演变历史、硬件基础知识及服务器相关知识。从电子管时代的ENIAC到冯-诺伊曼架构,再到现代计算机系统组成,详细讲解了计算机的发展历程。此外,文章还介绍了服务器的分类、品牌、硬件组成以及IDC机房的上架流程,为读者提供了全面的技术背景知识。
15 0
服务器linux!!!
|
4天前
|
人工智能 安全 Linux
|
7天前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
35 3
|
10天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
4天前
|
Linux
Linux 修改服务器时间
【10月更文挑战第27天】Linux 修改服务器时间
13 0
|
7天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
14天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
109 5
|
13天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
49 4