内网穿透

1. 符号约定与目标

  • 局域网用大写字母表示,如,,

  • 局域网中的主机用小写字母表示,如,, 分别位于局域网,,

  • 公网ip用希腊字母表示,例如,,

  • 同一个局域网中的主机用小写字母后的数字区分,如,, 位于局域网A.

目标:利用使得能被访问

2. frp(fast reverse proxy)

github

https://github.com/fatedier/frp

用法见example

https://gofrp.org/zh-cn/docs/

2.1. frp工作原理

FRP 主要由 frps(服务端) 和 frpc(客户端) 两部分组成:

frps(Server): 部署在(具有公网 IP 的服务器)上,负责接收客户端连接,并将外部请求转发给 frpc。

frpc(Client): 部署在(内网机器)上,主动连接 frps,并建立一条 TCP 隧道,让公网流量可以访问本地服务。

上的frpc 启动时,主动连接 上的frps 的 bindPort(默认为7000),上的frpc 通过该端口与 frps 建立持久化的 TCP 控制通道,用于心跳检测和端口映射管理。

上的frpc 根据配置文件 frpc.toml,向 上的frps 注册代理(proxy),声明需要映射的端口(例如 SSH 端口 22)。

上的frps 记录这个代理信息,并在 remotePort(例如6000) 上监听来自外部的连接。

外部机器 通过 ssh -oPort=6000 test@.ip 访问 的 的remotePort端口。

上的frps 发现这个端口已被映射至 frpc 代理的 localPort = 22,于是将该连接转发到上的frpc。

上的frpc 收到 frps 转发的 SSH 请求后,将数据包转发到 localIP(127.0.0.1) 和 localPort(22),从而完成 SSH 连接。

3. zerotier

官网

https://www.zerotier.com/

github

https://github.com/zerotier/ZeroTierOne

用法见archlinux-wiki-zerotier

https://wiki.archlinux.org/title/ZeroTier