某位阿里云上的用戶提了個(gè)需求:
阿里云上兩個(gè)數(shù)據(jù)庫服務(wù)器A和B,本來規(guī)劃是沒有公網(wǎng)IP,不能從公網(wǎng)訪問,只能線上業(yè)務(wù)系統(tǒng)從VPC訪問。
但是后續(xù)用戶的報(bào)表系統(tǒng)要從公網(wǎng)直連數(shù)據(jù)庫服務(wù)器A,用于輸出報(bào)表。
所以就給A服務(wù)器臨時(shí)配置了個(gè)EIP(彈性公網(wǎng)IP),可以從公網(wǎng)訪問服務(wù)器A的Oracle數(shù)據(jù)庫。
隨后又需要從公網(wǎng)連接服務(wù)器B,但不想再買EIP(彈性公網(wǎng)IP)。
rinetd是一個(gè)可以實(shí)現(xiàn)TCP端口轉(zhuǎn)發(fā)的小軟件(UDP不支持)。
可以編譯安裝,也可以rpm安裝。
rpm包下載地址如下:
http://li.nux.ro/download/nux/misc/el6/x86_64/rinetd-0.62-9.el6.nux.x86_64.rpm
圖1 添加語句
圖2 服務(wù)器A的監(jiān)聽端口
在A服務(wù)器上安裝這個(gè)軟件
r p m - i v h rinetd-0.62-9.el6.nux.x86_64.rpm
修改/etc/rinetd.conf文件
添加如下語句,如圖1。
語句1,在A服務(wù)器的所有IP上監(jiān)聽15282端口,將流量轉(zhuǎn)發(fā)給10.10.10.81(服務(wù) 器 B) 的1521端口。
語句2,同時(shí)限制只能申明的3個(gè)IP可以訪問該端口。
檢查配置文件語法是否正確
/sbin/rinetd -c /etc/rinetd.conf
啟動(dòng)rinetd服務(wù)
service rinetd start
查看服務(wù)器A的監(jiān)聽端口,如圖2。
到此步,后面連接服務(wù)器A的TCP 15282端口就相當(dāng)于連接服務(wù)器B的TCP 1521端口。
理論上來說iptables也是可以實(shí)現(xiàn)該需求的,只是公有云上一般都提供安全組或者虛擬防火墻,不需要開iptables,如果開起可能會(huì)影響到已經(jīng)在線上運(yùn)行的業(yè)務(wù)。
如果需要其他協(xié)議類型,如UDP的轉(zhuǎn)發(fā),就需要socat一類的軟件了。