我正在研究简单的流量隧道解决方案(Linux)。
客户端创建tun
接口,路由所有流量,打包所有到达的数据包,然后通过udp
或tcp
连接发送到服务器端。
服务器端应该像NAT
一样工作。更改源IP地址,源端口(用于tcp / udp)通过sock_raw
放在外部网络接口上,通过sock_raw
侦听响应,保留原始源端口<->替换源的映射-port并将响应发送回客户端。
问题是:我应该如何选择replaced-source-port
?操作系统从ephemeral ports中选择它们。我不能自己选择它,否则会引起冲突。我通过sock_raw
发送数据包后,操作系统内核选择了端口,并且我没有机会构建原始源端口<->替换源端口映射。即使我自己选择端口,OS内核也会用tcp
rst
来答复所有dst port
与特定应用程序无关的传入tcp数据包。
P.S。我也不确定隧道的整体解决方案。您的建议将不胜感激。