网络回家(异地组网方案)

8月6日 122 1

需求

近期公司业务不怎么忙了,急需一种满足在公司或其他地方开发项目以及摸鱼的组网方案,无缝访问家中的家中的网络设备与服务,即通过本地ip可直接访问。

基础网络环境

  • 家中网络:NAT1 内网 IPV4 公网 IPV6
  • 公司网络:IPV4

尝试的方案

  • P2P 组网
  • FRP 穿透 OpenV*N

两个方案各有各的问题,优先考虑的是各种基于 P2P 的组网方案,不依赖三方服务,且穿透后速度理论上可以达到上传上限,但是实际测试下载来有一些没办法实现无感穿透,即直接访问家中局域网 IP,但是速度极慢,怀疑是无法打洞使用了节点转发,或是打洞后被某些东西限制了速率。

用时间比较长的是 FRP 的方案,穿透一个端口到内网的 OpenV*N 服务,用起来挺好挺稳定,速度稍微慢了点,但是应对远程开发,小文件转发还是可以的。但是今天突然提示隧道被封禁了,看了下服务规则,才知道不能搭建类似这样的代理哪怕是国内的服务也一样,遂开始考虑其他方案。

Stun打洞

搜索后看见这个博主的方案 https://azwhikaru.com/55.html 思路就很棒。
大概流程使用 Stun 打洞获取公网 IP 与端口号,通过UPNP自动转发至本地代理服务的端口,生成配置文件,远程获取这个文件,并开始代理。

具体方案(Docker)

  • 安装 So*ks5 并暴露一个端口用于代理
  • 安装 Natter 设置对应参数、转发、脚本
  • 将脚本动态生成的代理文件上传到公网(或其它可以访问的位置)
#!/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
  • 移动似乎限制了上传速度
    暂时无法解决。

评论(1)

发布评论