点对点内网穿透

frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景。

使用方式同 stcp 类似,需要在两边都部署上 frpc 用于建立直接的连接。

目前处于开发的初级阶段,并不能穿透所有类型的 NAT 设备,所以穿透成功率较低。穿透失败时可以尝试 stcp 的方式。

  1. frps 除正常配置外需要额外配置一个 udp 端口用于支持该类型的客户端:

    1. bind_udp_port = 7001
  2. 启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:

    1. # frpc.ini
    2. [common]
    3. server_addr = x.x.x.x
    4. server_port = 7000
    5. [p2p_ssh]
    6. type = xtcp
    7. # 只有 sk 一致的用户才能访问到此服务
    8. sk = abcdefg
    9. local_ip = 127.0.0.1
    10. local_port = 22
  3. 在要访问这个服务的机器上启动另外一个 frpc,配置如下:

    1. # frpc.ini
    2. [common]
    3. server_addr = x.x.x.x
    4. server_port = 7000
    5. [p2p_ssh_visitor]
    6. type = xtcp
    7. # xtcp 的访问者
    8. role = visitor
    9. # 要访问的 xtcp 代理的名字
    10. server_name = p2p_ssh
    11. sk = abcdefg
    12. # 绑定本地端口用于访问 ssh 服务
    13. bind_addr = 127.0.0.1
    14. bind_port = 6000
  4. 通过 ssh 访问内网机器,假设用户名为 test:

    ssh -oPort=6000 test@127.0.0.1