【发布时间】:2012-07-16 16:17:23
【问题描述】:
我正在防火墙后面的服务器上运行 TURN 服务器 (http://tools.ietf.org/html/rfc5766)。机器有一个公共 IP 地址,传入和传出的网络数据包从服务器的专用 IP 地址发送到/从该地址发送。基本上,服务器不能将套接字绑定到公共 IP 地址,只能绑定私有 IP 地址。运行 ifconfig 显示网络设备具有私有 IP 地址。
当我运行 TURN 服务器时,我必须绑定到私有 IP 地址(因为服务器不认为它连接到公共 Internet)。对分配创建的所有响应都会发回带有私有 IP 地址的 XOR-RELAYED-ADDRESS。客户端收到 XOR-RELAYED-ADDRESS 并将数据发送到服务器的私有 IP 地址,这显然失败了。
我正在考虑两种选择来克服这个问题:
- 让我的客户端代码忽略 XOR-RELAYED-ADDRESS 的 IP 地址,只使用 XOR-RELAYED-ADDRESS 的端口。客户端会将所有中继消息发送到 TURN 服务器的公共 IP(因为客户端已经事先知道该值)和 XOR-RELAYED-ADDRESS 端口。
- 更改我的服务器以了解其公共 IP(即使它无法将套接字绑定到它),并始终在 XOR-RELAYED-ADDRESS 响应中发回公共 IP。
我觉得第一种方法破坏了 TURN RFC...即使我无法想象 TURN 服务器会将 XOR-RELAYED-ADDRESS 的 IP 作为 TURN 服务器的公共 IP 以外的其他东西发送回的情况, RFC 说 XOR-RELAYED-ADDRESS 是客户端应该发送数据的地方。
我觉得第二种方法破坏了 RFC less...如果这有意义的话。此外,这种方法不会强制客户端做任何特殊的事情,而第一种方法需要所有客户端都遵守上述规定。
您对此有何看法?有没有人经历过这种情况,和/或对哪种方法破坏 RFC 更少,或者任何一种方法是否违反了 RFC 有任何意见?
【问题讨论】:
标签: networking nat-traversal stun