Table of Contents
在内网进行开发 / 部署时,经常会遇到这样一种情况:
内网机器几乎不可能直接接入互联网,例如无法外接网线、无法修改网络拓扑等。
那么,有没有一种“曲线救国”的方式,让内网主机也能访问互联网呢?
假设存在如下场景:
- 一台无法直接联网的内网设备
- 内网地址示例:
10.0.0.10
- 内网地址示例:
- 一台笔记本电脑,可以接入该内网
- 内网地址示例:
10.0.1.100
- 内网地址示例:
内网网段示例为 10.0.0.0/8,内网网关为 10.0.0.1。
显然,只要笔记本能够同时连接内网与外网,问题就有解:
- 内网:通过有线网卡接入
- 外网:通过无线或另一块有线网卡接入
假设笔记本的外网地址示例为 172.16.0.100,外网网关为 172.16.0.1。
核心思路
- 调整路由表优先级
- 内网网段 → 走内网网关
- 其他所有流量(
0.0.0.0/0)→ 走外网网关
- 将笔记本上的代理工具(HTTP / SOCKS)暴露到局域网
- 内网设备将流量 proxy 到笔记本
- 但仍存在两个问题
- DNS 解析怎么办?
- 某些应用不支持代理协议怎么办?
- 解决方案:直接上 TUN 网卡
- TCP / UDP 流量全部接管,无需逐应用配置代理
内外网与双网卡分流原理
假设网络环境如下:
- Wi-Fi:连接外网
- 有线:连接内网
一点小知识
- 大多数情况下:有线网卡的路由优先级高于无线
- Linux 可以在单张网卡上配置多个 IP 和网关
- Windows 踩过坑,不支持单网卡多IP和网关
Windows 下的内外网分流
# 查看 IPv4 路由表route print -4
# 删除所有默认路由(有线和无线的都会删掉)route delete 0.0.0.0
# 只把默认路由加回外网网关:其他所有流量走 Wi-Firoute add 0.0.0.0 mask 0.0.0.0 172.16.0.1
# 内网网段走内网网关(加 -p 可以持久化,重启后仍然生效)route -p add 10.0.0.0 mask 255.0.0.0 10.0.0.1 metric 10⚠️ 注意
- 网关、网段、metric 均需根据实际环境调整
- 需要以管理员身份运行
Linux / Debian(以 Debian 13 为例)
Linux 下的配置更简洁:
命令行方式
# 删除有线网卡(内网)的默认路由,默认路由只留给 Wi-Fisudo ip route del default dev eth0
# 添加静态路由:内网网段走内网网关sudo ip route add 10.0.0.0/8 via 10.0.0.1 dev eth0
# 查看当前路由ip route showGNOME 桌面方式
- 打开对应网络连接设置
- 点击 “路由…” (Routes…)
- 勾选: “仅用于此网络上的资源” (Use this connection only for resources on its network)
该选项会自动阻止该连接成为默认路由,无需手动调整路由表。
TUN 网卡配置 / sing-box 示例
当代理方案无法覆盖所有应用时,TUN 模式是最省事的选择。
下面的 sing-box 配置运行在内网设备上:TUN 网卡接管设备上的所有 TCP / UDP 流量和 DNS,再转发到笔记本暴露在内网的 SOCKS 代理(10.0.1.100:7890),由笔记本经 Wi-Fi 送出去。私有地址的流量仍然直连。
示例使用 FakeIP 模式,用于完全接管流量:
{ "log": { "level": "warning", "timestamp": true }, "experimental": { "cache_file": { "enabled": true, "store_rdrc": true } }, "dns": { "independent_cache": true, "servers": [ { "type": "local", "tag": "local", "detour": "default" }, { "tag": "fakeip", "type": "fakeip", "inet4_range": "198.18.0.0/15", "inet6_range": "fc00::/18" } ], "rules": [ { "query_type": ["A", "AAAA"], "server": "fakeip" } ] }, "inbounds": [ { "type": "tun", "address": [ "172.18.0.1/30", "fd00::1/126" ], "auto_route": true, "auto_redirect": true, "strict_route": true }, { "type": "mixed", "listen": "127.0.0.1", "listen_port": 17890, "set_system_proxy": true } ], "outbounds": [ { "tag": "default", "type": "selector", "default": "proxy", "outbounds": ["proxy", "direct"] }, { "tag": "direct", "type": "direct" }, { "tag": "proxy", "type": "socks", "server": "10.0.1.100", "server_port": 7890 } ], "route": { "final": "default", "auto_detect_interface": true, "rules": [ { "action": "sniff" }, { "protocol": "dns", "action": "hijack-dns" }, { "ip_is_private": true, "outbound": "direct" } ] }}📌 说明
- 示例 IP 均为脱敏后的私有地址
- 笔记本上的代理需要监听内网地址(或
0.0.0.0)并允许局域网连接,否则内网设备连不上- FakeIP 非常适合复杂应用、游戏、CLI 工具等场景
这项技术还能做什么?
-
在支持策略路由的路由器中接入 多 WAN
- 例如:运营商 A + 运营商 B
- 国内流量走 A,国际流量走 B
-
内网调试、渗透测试、应急运维
-
在不改动内网拓扑的前提下实现“准上网环境”