如何使用 iptables 在 TCP 级别转发数据包?

如何使用 iptables 在 TCP 级别转发数据包?

假设我有两台本地机器A和B(Ubuntu),还有一台远程服务器C。本来通过RESTful API,我可以GET https://domain_of_C/resources直接从机器A获取一些资源远程服务器C

现在的要求是我需要先打电话机器B在 192.168.1.2(B 的 IP 地址)处:GET https://192.168.1.2/resources,然后应该有帮助A转发所有内容至远程服务器C,以及从CA机器 B 应该盲目地传递这些数据包,包括 SSL 数据包。

我的问题是如何iptables使用机器B实现这个?到目前为止,我已经使用过:

sysctl net.ipv4.ip_forward=1   #enable ip forwarding

iptables -t nat -A POSTROUTING -j MASQUERADE   #ip masquerade

#forward everything to 443 port on the remote server
iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination ip_of_remote_server:443

在 B 上使用这些命令后,如果我使用GET http://192.168.1.2/resources(HTTP,而不是 HTTPS),它可以正常工作,这意味着我可以成功访问远程服务器上的资源。但是,它不适用于 HTTPSGET https://192.168.1.2/resources

我不知道我是否应该打电话在这种情况下,使用代理,但请注意,我没有考虑使用任何 HTTP 代理(Apache、Nginx)。我希望机器 B 在 TCP 级别转发内容(我不想处理 SSL 证书)

这可能吗?

答案1

使用rinetd

rinetd 使用基于 IP 的基本访问控制将 TCP 连接从一个 IP 地址和端口重定向到另一个 IP 地址和端口。rinetd 是一个单进程服务器,可处理文件 /etc/rinetd.conf 中指定的地址/端口对的任意数量的连接。由于 rinetd 使用非阻塞 I/O 作为单个进程运行,因此它能够重定向大量连接而不会对机器造成严重影响。

相关内容