抱歉,标题和标签有点模糊,我还不能找到正确的术语。请指教,我会修改。
我正在实现一个 STUN 服务器,该服务器装在 Docker 容器中,托管在 Google Container Engine 的 Kubernetes 上。该项目利用负载平衡器(GCE 上的转发规则)将外部请求发送到 pod/容器中的相应端口,
我已将进入 eth0 的所有流量路由到 2 个虚拟接口 (eth0:1、eth0:2):
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 61214 -j DNAT --to-destination 172.26.0.6
(为了完整起见,第二个目的地是 172.26.0.7)
客户端应用程序可以顺利到达,因此 NAT 确定继续进行。然而,当 STUN 服务器需要创建套接字并链接回客户端应用程序时,这会突然停止,因为它获得的源 IP 是 Kubernetes 上主机 VM 实例的内部 IP(例如 10.128.0.4)。由于没有建立连接,客户端和服务器套接字超时。
有没有办法保留实际的源地址,直到到达我的服务器应用程序?我愿意放弃当前设置,只要我的请求到达服务器并且服务器能够与客户端建立返回连接。
谢谢。
答案1
我很高兴地发现,这是我们工作中不常见的情况之一,解决方案存在,并及时提供(即刚刚进入测试阶段)。
不幸的是,它仅适用于我们的环境,即基于 GCE/GKE 的 Kubernetes。截至撰写本文时,其他平台(例如 AWS)的用户将需要采用其他解决方案。