如果你有一台拥有公网IP且端口未被过滤的服务器, 你可以在该服务器上运行 NAT Tunnel(NT)服务端, 而在你的NAT后面设备上运行 NT 客户端。 服务端需要两个开放端口:一个用于与 NT 客户端通信(--admin), 另一个供普通客户端连接(--public:这是你希望用户使用的端口)。
NT 客户端会向服务端的 admin IP/端口发起连接。 一旦服务端收到新的连接请求,它会通知 NT 客户端, 后者随即创建一个新的隧道连接至服务端, 该隧道再连接到 NT 客户端侧的目标服务(--local)。
NT 客户端与 NT 服务端在管理接口上的连接, 通过共享密钥防止未经授权的使用。 如果密钥复杂度不足,能够拦截数据包的攻击者有可能破解该密钥。 建议至少使用10个随机字符和数字。
示例: 假设你有一台 HTTP 服务器运行在本地机器的 80 端口上。 你想将其开放到云服务器/VPS等公网 IP 的 7000 端口。 我们使用云服务器的 8000 端口作为控制通道。
服务端:
natsrv.py --mode server --secret s3cretP4ss --public 0.0.0.0:7000 --admin 0.0.0.0:8000
客户端:
natsrv.py --mode client --secret s3cretP4ss --local localhost:80 --admin example.com:8000