现在遇到一个场景,原来的一个服务只给一个客户端用,但现在增加了一个客户端,由于客户端配置相同,但是服务端需要区别对待两个客户端的服务端配置,所以利用 iptables 根据源地址做了一个端口转发,实现了 demux 。

假设:服务器在 192.168.0.1 ,客户端分别在 192.168.0.2 和 192.168.0.3 。客户端配置的服务端地址是 192.168.0.1:8000 。之前,在服务器上只跑了一个服务,监听着 8000 端口。

现在,在服务器上再跑一个服务,监听 8001 端口,同时根据需求进行相应的配置。然后,加上如下 iptables 规则:

$ sudo iptables -t nat -A PREROUTING -s 192.168.0.3 -d 192.168.0.1 -p tcp -m tcp --dport 8000 -j REDIRECT --to-ports 8001

这样,在不需要更改客户端的情况下,完成了需要的效果。