我希望我的 Glassfish 网络服务器为两个不同的 IP 地址提供网页。我想做的是设置 iptable 规则来转换端口。
对于IP#1
198.xxx.xxx.14:80 <-- redirected to --> port 8080
198.xxx.xxx.14:443 <-- redirected to --> port 8181
对于IP #2
199.xxx.xxx.185:80 <-- redirected to --> port 9090
199.xxx.xxx.185:443 <-- redirected to --> port 9191
然后,在我的 Glassfish 服务器上,我将拥有两个虚拟服务器:
- 一个监听所有主机的端口 8080 和 8181,
- 另一个监听所有主机的端口 9090 和 9191。
我的 Debian 服务器上只有一个 IP 地址的工作 iptables 规则如下:
iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A OUTPUT -o lo -p tcp --dport 443 -j REDIRECT --to-port 8181
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8181
我的/etc/hosts
文件包含两个 IP 地址:
...
198.xxx.xxx.14 subdomain.mydomain1.com myservername1
127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
199.xxx.xxx.185 mydomain2.org myservername2
并且/etc/network/interfaces
已经包含网络适配器绑定,如下所示:
...
auto venet0:0
iface venet0:0 inet static
address 199.xxx.xxx.185
netmask 255.255.255.255
auto venet0:6
iface venet0:6 inet static
address 198.xxx.xxx.14
netmask 255.255.255.255
...
答案1
iptables -t nat -A PREROUTING -p tcp -m tcp -d 198.xxx.xxx.14 --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp -m tcp -d 198.xxx.xxx.14 --dport 443 -j REDIRECT --to-ports 8181
iptables -t nat -A PREROUTING -p tcp -m tcp -d 198.xxx.xxx.185 --dport 80 -j REDIRECT --to-ports 9090
iptables -t nat -A PREROUTING -p tcp -m tcp -d 198.xxx.xxx.185 --dport 443 -j REDIRECT --to-ports 9191
这将处理来自其他主机的传入流量。对于本地访问,我建议完全删除 OUTPUT 规则并使用真实端口号以避免歧义。或者,只需选择连接到 127.0.0.1:80 或 127.0.0.1:443 时希望访问的两个端口,并为它们设置两个 OUTPUT 规则。