Iptables

當linux伺服器有兩個IP地址時如何設置ipables重定向埠

  • November 16, 2018

我希望我的 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
...
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 規則。

引用自:https://unix.stackexchange.com/questions/439869