需求
近期公司业务不怎么忙了,急需一种满足在公司或其他地方开发项目以及摸鱼的组网方案,无缝访问家中的家中的网络设备与服务,即通过本地ip可直接访问。
基础网络环境
- 家中网络:NAT1 内网 IPV4 公网 IPV6
- 公司网络:IPV4
尝试的方案
- P2P 组网
- FRP 穿透 OpenV*N
两个方案各有各的问题,优先考虑的是各种基于 P2P 的组网方案,不依赖三方服务,且穿透后速度理论上可以达到上传上限,但是实际测试下载来有一些没办法实现无感穿透,即直接访问家中局域网 IP,但是速度极慢,怀疑是无法打洞使用了节点转发,或是打洞后被某些东西限制了速率。
用时间比较长的是 FRP 的方案,穿透一个端口到内网的 OpenV*N 服务,用起来挺好挺稳定,速度稍微慢了点,但是应对远程开发,小文件转发还是可以的。但是今天突然提示隧道被封禁了,看了下服务规则,才知道不能搭建类似这样的代理哪怕是国内的服务也一样,遂开始考虑其他方案。
Stun打洞
搜索后看见这个博主的方案 https://azwhikaru.com/55.html 思路就很棒。
大概流程使用 Stun 打洞获取公网 IP 与端口号,通过UPNP自动转发至本地代理服务的端口,生成配置文件,远程获取这个文件,并开始代理。
具体方案(Docker)
#!/bin/sh
# Natter notification script arguments
protocol="$1"; private_ip="$2"; private_port="$3"; public_ip="$4"; public_port="$5"
# 定义配置文件路径
CONFIG_FILE="/opt/run/home.yaml"
# 获取当前时间,格式化为:2025-08-02 11:28:51
TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')"
# 日志输出函数
log_info() {
echo "$TIMESTAMP [I] $*"
}
# 使用 cat 和 Here Document 生成 YAML 格式的代理配置
cat > "$CONFIG_FILE" << EOF
proxies:
- name: 'Home'
type: socks5
server: $public_ip
port: $public_port
username: 'home'
password: 'XXXXXXXX'
EOF
log_info "Clash 代理配置文件已生成"
log_info "SOCKS5 代理地址: socks5://home:cbskcrnx@$public_ip:$public_port"
log_info ""
遇到的问题
- Natter 不能自动发现路由器的 UPNP 服务
修改了一下代码已经提交给 Natter,需要 Docker 镜像的话可以联系我。 - 防火墙阻止了 UPNP 的自动发现
创建 IP 规则 放行 192.168.10.0/24、239.255.255.250 - 移动似乎限制了上传速度
暂时无法解决。
试了试,挺好。