我一直觉得,研发总监这个职位,除了开会、写周报和安抚研发组长,最核心的修养应该是:即便身在千里之外,也能让外地的设备和服务像接在公司机房交换机里一样丝滑。
我决定在自家的 Unraid NAS 服务器上修一座“跨时空大桥”。
本以为是手到擒来,结果却在网络协议的底层泥潭里,跟子网掩码反复横跳了半天。
第一关:手撕 MFA 的“温柔杀手”
公司内网的 VPN 极其严苛,Cisco AnyConnect 配合 MFA 动态码。这意味着我每次拉代码,都得像网恋奔现一样,先掏出手机看动态码。
身为一个追求“全自动”的架构师,这绝对不能忍。我祭出了 OpenConnect 容器,并写了一段 Python 脚本,让它自己跟自己“握手”:
Docker部署命令
docker run
-d
--name='openconnect'
--net='br0'
--ip='192.168.50.94'
--pids-limit 2048
--privileged=true
-e TZ="Asia/Shanghai"
-e HOST_OS="Unraid"
-e HOST_HOSTNAME="NasTwo"
-e HOST_CONTAINERNAME="openconnect"
-l net.unraid.docker.managed=dockerman
-v '/mnt/user/appdata/openconnect/etc':'/etc/openconnect':'rw'
-v '/mnt/user/appdata/openconnect/config':'/config':'rw'
--entrypoint /bin/sh 'vimagick/openconnect' /config/connect.sh
connect.sh 脚本
#!/bin/sh
echo "=== 启动 ==="
# 1. 自动安装 Python 和 pyotp
apk add --no-cache python3 py3-pip iptables
pip install pyotp --no-cache-dir
# 2. 自动化获取 6 位动态码
MFA_CODE=$(python3 -c "import pyotp; print(pyotp.TOTP('J7V...FAKE_SECRET...K9Y').now())")
echo "获取到动态码: $MFA_CODE"
# 3. 开启转发闸门 (通往耶路撒冷的唯一路径)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -I FORWARD -j ACCEPT
# 4. 暴力拨号
echo "MyPasswd${MFA_CODE}" | openconnect vpn.aurora-cloud.com:8777 \
--user="old_k_tech" --passwd-on-stdin --non-inter
最后,在路由器配置一条静态路由,就完成了。
第二关:被“大子网”掩埋的邻居
隧道打通后,最诡异的事情发生了:Unraid 宿主机能 ping 通公司,但我的办公电脑就是打不开网页。
排查了一通 tracert,我差点一口老血喷出来。因为我家里设备多,我随手把子网掩码设成了极其豪横的 255.255.0.0(/16 段)。
这里有个冷知识: 当掩码是 /16 时,电脑认为 192.168.x.x 全是自己家的。
当我访问公司 192.168.2.x 网段时,我的电脑会在家里 Wi-Fi 频道里扯着嗓子大喊:“嘿!隔壁住着 2.235 的兄弟在吗?”
结果: 公司机器在上海,当然没人理它。电脑觉得“既然邻居不在家,那就报错吧”,于是包根本没出家门。
第三关:Host 模式的“暴力美学”
为了解决这个“邻居误会”,我放弃了 Docker 默认的桥接模式,直接开启了 Host 模式。这就像是把 VPN 网卡直接插在了 NAS 的脊梁骨上。
修改 Docker 部署命令 net='host' :
docker run -d
--name='aurora_vpn'
--net='host'
--privileged=true
其他配置省略......
最后一步,我给办公电脑下了一道“死命令”:
“以后看到 2 段的流量,别在院子里瞎喊,直接去找 NAS(192.168.50.20)传话!”
:: Windows 管理员权限执行,永久生效
route -p add 192.168.2.0 mask 255.255.255.0 192.168.50.20
结局:38 毫秒的浪漫

C:\Windows\System32>route -p add 192.168.2.0 mask 255.255.255.0 192.168.50.20
操作完成!
C:\Windows\System32>tracert -d 192.168.2.235
通过最多 30 个跃点跟踪到 192.168.2.235 的路由
1 3 ms 1 ms 2 ms 192.168.50.20
2 38 ms 38 ms 38 ms 192.168.10.1
3 * * *
4 39 ms 37 ms 38 ms 192.168.2.235
跟踪完成。
当 tracert 的第一跳落在 NAS 上,第二跳瞬间跨越千里出现在上海内网网关时,那种爽感,不亚于代码一次性跑通了 500 个单元测试。
延迟 38ms。
在沈阳的深夜里,我点开上海总部的研发看板,数据流丝滑得像在本地。
写在最后:为什么要折腾?
技术人的浪漫,就藏在亲自打通的 tun0 网口和 0% 丢包率里。