如何在Linux上保留TCP源端口?

时间:2019-01-08 10:44:20

标签: sockets tcp network-programming udp nat

我正在研究简单的流量隧道解决方案(Linux)。

  1. 客户端创建tun接口,路由所有流量,打包所有到达的数据包,然后通过udptcp连接发送到服务器端。

  2. 服务器端应该像NAT一样工作。更改源IP地址,源端口(用于tcp / udp)通过sock_raw放在外部网络接口上,通过sock_raw侦听响应,保留原始源端口<->替换源的映射-port并将响应发送回客户端。

问题是:我应该如何选择replaced-source-port?操作系统从ephemeral ports中选择它们。我不能自己选择它,否则会引起冲突。我通过sock_raw发送数据包后,操作系统内核选择了端口,并且我没有机会构建原始源端口<->替换源端口映射。即使我自己选择端口,OS内核也会用tcp rst来答复所有dst port与特定应用程序无关的传入tcp数据包。

P.S。我也不确定隧道的整体解决方案。您的建议将不胜感激。

0 个答案:

没有答案