设计原则图文详解:让内网穿透更清晰易懂

家里装了摄像头,想在公司手机上看看门口情况,结果发现外网打不开。这种情况太常见了。其实问题不在设备,而在网络结构。内网穿透的本质,是把藏在路由器后面的服务,安全稳定地暴露到公网。要做好这件事,得讲方法,不能瞎折腾。

原则一:最小暴露面

不是所有服务都要对外开通。比如你有个 NAS,里面存着全家照片和工作文档,没必要全放网上。正确做法是只开放需要的部分,比如仅映射文件共享的端口,其他一律关闭。就像你家大门开着,但卧室门还是关着更安全。

原则二:通信路径可追踪

每次请求从哪来、经过什么节点、到达哪里,都应该有记录。比如用 frp 做穿透时,配置日志级别为 info,能看到连接建立过程:

<plugin>
  log_level = info
  log_file = /var/log/frps.log
</plugin>

这样一旦出问题,翻日志就能定位是客户端断了还是服务器没响应。

原则三:身份验证不偷懒

很多人图省事,把 token 设成 123456 或者干脆空着。这等于把钥匙挂在门把手上。正确的做法是使用长随机字符串,比如用 openssl 生成:

openssl rand -hex 16

得到的结果作为 token 配置进去,别人猜都猜不到。

原则四:链路加密成标配

数据在公网上传输,谁都能截。所以 TLS 能开就开。frp 支持 HTTPS 穿透,配置时加上协议转换:

<route>
  type = https
  custom_domains = cam.yourhome.com
  plugin = https2http
  plugin_opts = addr=127.0.0.1:8080,host_header_rewrite=127.0.0.1
</route>

这样访问时浏览器显示小绿锁,心里也踏实。

原则五:故障要能自恢复

网络波动难免,断了就得自动重连。frpc 客户端默认会重试,但间隔太久影响体验。可以调参数加快恢复速度:

login_fail_exit = false
heartbeat_interval = 10

这样断线后十几秒内就能重新接上,监控视频不会卡太久。

这些原则看起来简单,但真正在部署时一条条落实,稳定性差不了。别想着一步到位,先保证能用,再按这几个点一步步优化,用起来才安心。