一般來說,出現這樣的問題,有一個系統RHEL 6.4 Server,有一對網路介面透過bonding合而為一。本系統IP位址:10.7.7.1
。接下來在系統上運行需要連接到10.7.7.2
連接埠 3306 上的MySQL 伺服器的應用程式。事實上,MySQL 運行在10.7.7.3
.應用程式中的連接設定是硬編碼的,因此無法變更。可以透過這樣的方式聽到iptables做地址翻譯。如何使得當應用程式嘗試10.7.7.2:3306
iptables被攔截並向 發送請求10.7.7.3:3306
,並收到回應,並將其提供給應用程式?
答案1
這可以透過 iptables 中的 NAT 規則來完成。
如果 MySQL 伺服器位於同一主機上,請使用 REDIRECT 規則。將所有到連接埠 3306 而非 10.7.7.3 的連線重新導向到所需的位址。
如果 MySQL 伺服器不在同一台主機上,請使用 DNAT 規則。
答案2
假如說
- .1、.2 和 .3 是不同的機器
- 您無法交換 .2 和 .3 的 IP 位址
- .2 正在運行 Linux
以下是您需要在 .2 上新增的內容:
-t nat -A PREROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3
-t nat -A POSTROUTING -d 10.7.7.3 -p tcp --dport 3306 -j SNAT --to-source 10.7.7.2
然而...
如果您因為某些原因無法在 .2 上建立 iptables 規則和/或您想攔截 .1 上的流量,則您需要在 .1 上執行下列操作:
-t nat -A POSTROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3