Table of Contents
在内网进行开发 / 部署时,经常会遇到这样一种情况:
内网机器几乎不可能直接接入互联网,例如无法外接网线、无法修改网络拓扑等。
那么,有没有一种“曲线救国”的方式,让内网主机也能访问互联网呢?
假设存在如下场景:
- 一台无法直接联网的内网设备
- 内网地址示例:
10.0.0.10
- 内网地址示例:
- 一台笔记本电脑,可以接入该内网
- 内网地址示例:
10.0.1.100
- 内网地址示例:
显然,只要笔记本能够同时连接内网与外网,问题就有解:
- 内网:通过有线网卡接入
- 外网:通过无线或另一块有线网卡接入
假设笔记本的外网地址示例为:172.16.0.100
核心思路
- 调整路由表优先级
- 内网网段 → 走内网网关
- 其他所有流量(
0.0.0.0/0)→ 走外网网关
- 将笔记本上的 🐱(HTTP / 🧦 代理)暴露到局域网
- 内网设备将流量 proxy 到笔记本
- 问题来了 🤔
- DNS 解析怎么办?
- 某些冷门应用不支持代理怎么办?
- 解决方案:直接上 TUN 网卡
- 不讲道理 😈
- TCP / UDP 统统接管
内外网与双网卡分流原理
假设网络环境如下:
- Wi-Fi:连接外网
- 有线:连接内网
若需要持久化路由规则,通常需要在命令中添加
-p参数(不同系统略有差异)。
一点小知识
- 大多数情况下:有线网卡的路由优先级高于无线
- Linux 可以在单张网卡上配置多个 IP 和网关
- Windows 踩过坑,不支持单网卡多IP和网关
Windows 下的内外网分流
# 查看 IPv4 路由表route print -4
# 删除默认路由route delete 0.0.0.0
# 设置新的默认路由(外网网关)route add 0.0.0.0 mask 0.0.0.0 172.16.0.1route add 0.0.0.0 mask 0.0.0.0 172.16.0.254
# 针对内网网段添加静态路由(示例)route add 10.0.0.0 mask 255.255.255.0 192.168.0.1 metric 10⚠️ 注意
- 网关、网段、metric 均需根据实际环境调整
- 管理员权限是必须的
Linux / Debian(以 Debian 13 为例)
Linux 下配置就优雅得多了 🐧
命令行方式
# 删除有线网卡的默认路由sudo ip route del default dev eth0
# 添加静态路由:内网网段走内网网关sudo ip route add 10.0.0.0/24 via 192.168.0.1 dev eth0
# 查看当前路由ip route showGNOME 桌面方式
- 打开对应网络连接设置
- 点击 “路由…” (Routes…)
- 勾选: “仅用于此网络上的资源” (Use this connection only for resources on its network)
该选项会自动阻止该连接成为默认路由,非常省心 👍
TUN 网卡配置 / 🎵-Box 示例
当代理方案无法覆盖所有应用时,TUN 模式是最省事的选择。
下面示例为 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": "192.168.0.2", "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 均为脱敏后的私有地址
- FakeIP 非常适合复杂应用、游戏、CLI 工具等场景
这项技术还能做什么?
-
在支持策略路由的路由器中接入 多 WAN
- 例如:运营商 A + 运营商 B
- 国内流量走 A,国际流量走 B
-
内网调试、渗透测试、应急运维
-
在不改动内网拓扑的前提下实现“准上网环境”
使用ChatGPT润色