您好,登錄后才能下訂單哦!
前些日子,組長要我實(shí)現(xiàn)一個功能,將告警郵件中的不能訪問的生產(chǎn)機(jī)器ip+端口轉(zhuǎn)化為辦公環(huán)境可以訪問的域名(已經(jīng)通過端口映射配置)。報警程序是用go語言編寫的,如果直接將go語言配置文件中的ip+端口變成域名的話,程序就不能正常運(yùn)行了,可linux的hosts文件不支持直接將域名解析到端口映射的級別(順便說一句windows好像可以,即hostname可以在windows的hosts文件中解析為1.2.3.4:1234這種形式)。
于是大概想的這種策略:
1.將linux機(jī)器上的/etc/hosts中添加域名到ipA的配置;
2.想辦法將ipA對80端口的訪問重新定向到ipA的指定端口(比如520)。
第一步好做,但是第二步呢?用Apache端口映射功能?還要在裝個apache web server;于是想到了linux自帶的iptables。
很多搭建過rac、dg、hadoop這類需要多臺機(jī)器協(xié)同工作的程序的朋友應(yīng)該都接觸過iptables,而且通常都是iptables -F,清空管理規(guī)則,達(dá)到關(guān)閉防火墻的效果。其實(shí)防火墻只能說是iptables的一部分功能,感覺更準(zhǔn)確的說iptables是一個網(wǎng)絡(luò)管理工具,不僅能夠?qū)C(jī)器接收到的網(wǎng)絡(luò)數(shù)據(jù)丟棄或者接受,還可以進(jìn)行其他操作比如轉(zhuǎn)發(fā)、記錄日志等等。
iptables的大體結(jié)構(gòu)就像下面這的圖展示的(圖片來自互聯(lián)網(wǎng))
主要這么看這張圖:
1.iptables的規(guī)則可以在五個地方(這里專業(yè)叫法叫做鏈)起作用:路由規(guī)則之前(prerouting)、轉(zhuǎn)發(fā)過程中(forward)、路由規(guī)則之后(postrouting)、程序處理之前(input)、程序處理之后(output);
2.iptables主要有這三種功能(這里可以叫做三張表,畢竟規(guī)則就像數(shù)據(jù)庫中的記錄記錄在數(shù)據(jù)表一樣記錄在這):地址轉(zhuǎn)化(nat)、包過濾(filter)、修改包(mangle)(raw用的不多,不是很懂,在網(wǎng)上看了一下好像是優(yōu)先級高,可以避免nat等規(guī)則匹配提高效率)。
以perrouting為例,在這里可以通過iptables的一系列規(guī)則匹配,對發(fā)送過來的數(shù)據(jù)包進(jìn)行修改或者地址轉(zhuǎn)化;以forward為例,在經(jīng)過路由表匹配發(fā)現(xiàn)目標(biāo)機(jī)器不是這臺機(jī)器的時候,可以對數(shù)據(jù)包修改或者過濾其他的就不重復(fù)說明了。
下面說說iptables的語法(圖片來自互聯(lián)網(wǎng))
大體語法是這樣的
iptables -t 指明哪張表 -(A追加,I插入等等) 鏈名 匹配規(guī)則 特定操作(redirect、drop、accept等等)
以上面的需求來看,現(xiàn)在我想在訪問80端口的時候,將訪問重新定向到520端口。那么就可以在prerouting的時候,將訪問本機(jī)80端口的數(shù)據(jù)包變成訪問本機(jī)520端口的數(shù)據(jù)包
于是以root用戶執(zhí)行如下命令
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRET --to-port 520
這樣就達(dá)到想要的效果,即在go語言中配置域名,但是仍然能夠訪問正確的ip+端口。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。