对于如下场景:

在阿里云中,拥有一台有公网IP的主机+在同一交换机下的若干台只有内网的主机,

如何让只有内网的主机也可以访问互联网呢?

在此基础上,如何让他们可以免配置直接科学上网呢?

对于第一个问题,可以选择购买阿里云的公网NAT,但是他无法解决第二个问题

其实我们可以自建NAT(严格来说叫SNAT)来解决这两个问题,我们选择任意一台有访问公网能力的主机,将其作为这张局域网中的交换机(记为主机A)

这里我选择了一台Centos系统的主机,其他的系统也是同理

配置shellCrash

首先让其本身能科学上网

安装shellCrash,安装时选择路由模式,然后配置订阅(这步很简单,略)

记得切换 1 路由模式设置 7 设置路由劫持范围 为 局域网+本机

配置好后输入 curl -I www.google.com 检查能否正常上网

[root@bjxh ~]# curl -I www.google.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
// ...

这样就ok了

下面配置shellCrash使得其代理局域网的流量

2 功能设置 - 1 路由模式设置 ,给7 设置路由劫持范围切换为局域网+本机

-----------------------------------------------
当前路由模式为:Tproxy模式;ShellCrash核心为: meta 
切换模式后需要手动重启服务以生效!
-----------------------------------------------
 1 Redir模式:    Redir转发TCP,不转发UDP
 2 混合模式:     Redir转发TCP,Tun转发UDP
 3 Tproxy模式:   Tproxy转发TCP&UDP
 4 Tun模式:      Tun转发TCP&UDP(占用高不推荐)
-----------------------------------------------
 7 设置路由劫持范围:   局域网+本机
 8 容器/虚拟机劫持:    ON
 9 切换防火墙应用:     nftables
-----------------------------------------------
 0 返回上级菜单
请输入对应数字 > 

返回,然后是2 DNS设置这里的ECS优化可以打开

-----------------------------------------------
当前DNS运行模式为: mix 
切换模式后需要手动重启服务以生效!
-----------------------------------------------
 1 MIX模式:  CN域名realip其他fake-ip分流
 2 Route模式:CN域名realip其他dns2proxy分流
 3 Redir模式:不安全,需搭配第三方DNS服务使用
-----------------------------------------------
 4 DNS防泄漏:  ON      ———启用时少量网站可能连接卡顿
 5 Hosts优化:  ON      ———调用本机hosts并劫持NTP服务
 6 ECS优化:    ON      ———解决CDN下载浪费流量等问题
 7 DNS劫持端口:1053    ———用于兼容第三方DNS服务
 8 管理MIX模式Fake-ip过滤列表
 9 修改DNS服务器
-----------------------------------------------
 0 返回上级菜单
请输入对应数字 > 

返回,进入 3 透明路由流量过滤 - 5 自定义透明路由ipv4网段 确定下当前交换机的网段在里面,如果没有识别到,可以手动加进去,有的话就返回,到这里shellCrash就配置好了。

添加iptables规则

在主机A中输入下面的命令,注意给网段 172.23.128.0/20 换成你的交换机的网段,172.23.143.205换成你自己的主机A的内网IP,不能照抄

# 允许来自该交换机网段的所有流量转发到任何地方
iptables -I FORWARD -s 172.23.128.0/20 -j ACCEPT

# 允许回包给该交换机网段
iptables -I FORWARD -d 172.23.128.0/20 -m state --state RELATED,ESTABLISHED -j ACCEPT

# 给局域网主机的数据包贴上 主机A 的公网 IP
iptables -t nat -I POSTROUTING -s 172.23.128.0/20 -j SNAT --to-source 172.23.143.205

# 保存iptables(不同系统可能不一样,自己查一下)
service iptables save

这样主机A就配置好了,下面来到阿里云的管理面板

配置阿里云内网DHCP

进入 专有网络 ,点击进入你的主机对应的vpc


你会看到这里DNS主机名是关闭的,点击开启

然后点击上面的DHCP选项集的更改关联,去新建一个新的选项集



将你的主机A的ip写在第一个空位,给原本阿里云提供的那俩个ip往下挪一个位置

然后回到刚才的页面,选择切换到你刚刚新建的DHCP选项集

配置阿里云路由表

进入路由表,点击进入你的vpc对应的路由表

在自定义路由条目中添加如下条目

其中目标网段填 0.0.0.0/0

下一跳选择你的 主机A 作为下一跳即可。

完成!

到这里配置就大功告成啦,重启你的所有其他的内网主机以重新获取dhcp信息。

现在随便选一台内网的主机,测试一下吧(你可以使用主机A通过内网ip进行登录)

可以看到,非常完美!🎉

root@iZ0jl3vtg1ed7a751c19p9Z:~# ssh root@172.23.143.208
Linux iZ0jl5vs72thl3qwx36rp3Z 6.12.63+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.63-1 (2025-12-30) x86_64

Welcome to Alibaba Cloud Elastic Compute Service !

root@iZ0jl5vs72thl3qwx36rp3Z:~# curl -I www.baidu.com
HTTP/1.1 200 OK
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Content-Length: 0
Content-Type: text/html
Pragma: no-cache
Server: bfe
Date: Sun, 01 Feb 2026 14:17:33 GMT

root@iZ0jl5vs72thl3qwx36rp3Z:~# curl -I www.google.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
// ...