我从多个 IP 地址接收到我的服务器的连接,我想像 rinetd 一样路由这些连接,但要基于连接来自的 IP 来连接到指定的主机。
像这样:
IP 10.10.12.1 => CONNECTS TO MY SERVER => MY SERVER REDIRECTS IT TO 82.12.12.1
IP 10.10.12.2 => CONNECTS TO MY SERVER => MY SERVER REDIRECTS IT TO 81.121.12.10
ETC
是否有可能或者我需要编写自己的守护进程来实现此功能?
答案1
iptables
可以这样做:
sudo iptables -t nat -A PREROUTING -s 10.10.12.1 -j DNAT --to 82.12.12.1
sudo iptables -t nat -A POSTROUTING -s 10.10.12.1 -d 82.12.12.1 -j MASQUERADE
第一个命令更改数据包的目标地址,将其重定向到外部主机。第二个命令更改源地址,因此外部主机可以向您的服务器发送回复。
可能你只想重定向发往特定端口的数据包,例如,如果 10.10.12.1 仅通过 TCP 端口 80 和 1234 与 82.12.12.1 通信,则第一个iptables
命令将是:
sudo iptables -t nat -A PREROUTING -s 10.10.12.1 -p tcp -m multiport --destination-ports 80,1234 -j DNAT --to 82.12.12.1