对于如下场景:
在阿里云中,拥有一台有公网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
// ...