- 論壇徽章:
- 0
|
原帖由 江湖無賴 于 2003-9-18 11:35 發(fā)表 ![]()
怎么用iptable完成端口映射?
Q:一局域網(wǎng)192.168.1.0/24,有web和ftp服務(wù)器192.168.1.10、192.168.1.11,網(wǎng)關(guān)linux,內(nèi)網(wǎng)eth0,IP為192.168.1.1,外網(wǎng)eth1,IP為a.b.c.d,怎樣作NAT能使內(nèi)外網(wǎng)都能訪問公司的服務(wù)器?
A:# web
# 用DNAT作端口映射
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
# 用SNAT作源地址轉(zhuǎn)換(關(guān)鍵),以使回應(yīng)包能正確返回
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
# 一些人經(jīng)常忘了打開FORWARD鏈的相關(guān)端口,特此增加
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
# ftp
modprobe ip_nat_ftp ###加載ip_nat_ftp模塊(若沒有編譯進(jìn)內(nèi)核),以使ftp能被正確NAT
modprobe ip_conntrack_ftp ###加載ip_conntrack_ftp模塊
# 用DNAT作端口映射
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
# 用SNAT作源地址轉(zhuǎn)換(關(guān)鍵),以使回應(yīng)包能正確返回
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1
Q:網(wǎng)絡(luò)環(huán)境如上一問題,還在網(wǎng)關(guān)上用squid進(jìn)行透明代理,也作了SNAT了,為什么內(nèi)網(wǎng)還是不能訪問公司的web服務(wù)器?iptables如下:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
A:問題主要在PREROUTING鏈中REDIRECT和DNAT的順序,由于先進(jìn)行了REDIRECT(重定向),則到第二句DNAT時(shí),端口已變?yōu)?128,不匹配第二句的目的端口80,DNAT也就不會(huì)執(zhí)行,不能到達(dá)正確的目的地。解決的辦法有兩個(gè):
1、把REDIRECT語句放到DNAT語句的后面,如下:
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
2、在REDIRECT語句中增加匹配目的地址"-d ! a.b.c.d",如下:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -d ! a.b.c.d -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
按照這位兄臺(tái)說的嘗試添加源地址轉(zhuǎn)換和REDIRECT語句,貌似還是有問題。
因?yàn)?m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80 后面已經(jīng)指定了是80端口的吧。 |
|