假设我有两台本地机器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,以及从C到A。机器 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 作为单个进程运行,因此它能够重定向大量连接而不会对机器造成严重影响。“