免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1004 | 回复: 0
打印 上一主题 下一主题

NAT裡的伺服器~~ iptables 精彩討論. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-05 10:03 |只看该作者 |倒序浏览
小弟在設定NAT時遇到一個問題:就是眾伺服器放在NAT裡,從外部要存取內部的眾伺服器是沒問題的,但是從內部要透過外部存取內部的眾伺服器,卻都連線不了,猜想應該是三向交握的問題,拜讀了鳥哥和NETMAN大大在網站上,關於IPTABLES的大作之後,依然百思不得其解~~
以下是我套用了鳥哥所分享的SCRIPTS,依自己的需求而己成以下的規則:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH EXTIF INIF INNET
modprobe ip_tables > /dev/null 2>&1
modprobe iptable_nat > /dev/null 2>&1
modprobe ip_nat_ftp > /dev/null 2>&1
modprobe ip_nat_irc > /dev/null 2>&1
modprobe ip_conntrack > /dev/null 2>&1
modprobe ip_conntrack_ftp > /dev/null 2>&1
modprobe ip_conntrack_irc > /dev/null 2>&1
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
/sbin/iptables -Z -t nat
/sbin/iptables -P INPUT DROP
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -i lo -j ACCEPT
if [ "$INIF" != "" ]; then
/sbin/iptables -A INPUT -i $INIF -j ACCEPT
echo "1" > /proc/sys/net/ipv4/ip_forward
fi
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
AICMP="0 3 3/4 4 11 12 14 16 18"
for tyicmp in $AICMP
do
/sbin/iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
done
/sbin/iptables -t nat -A PREROUTING -p TCP -i $EXTIF -d 222.168.193.79 --dport 20 -j DNAT --to 192.168.123.11:20 # FTP
/sbin/iptables -t nat -A PREROUTING -p TCP -i $EXTIF -d 222.168.193.79 --dport 21 -j DNAT --to 192.168.123.11:21 # FTP
/sbin/iptables -t nat -A PREROUTING -p TCP -i $EXTIF -d 222.168.193.79 --dport 25 -j DNAT --to 192.168.123.11:25 # SMTP
/sbin/iptables -t nat -A PREROUTING -p UDP -i $EXTIF -d 222.168.193.79 --dport 53 -j DNAT --to 192.168.123.10:53 # DNS
/sbin/iptables -t nat -A PREROUTING -p UDP -i $EXTIF -d 222.168.193.79 --dport 53 -j DNAT --to 192.168.123.10:53 # DNS
/sbin/iptables -t nat -A PREROUTING -p TCP -i $EXTIF -d 222.168.193.79 --dport 80 -j DNAT --to 192.168.123.10:80 # WWW
/sbin/iptables -t nat -A PREROUTING -p TCP -i $EXTIF -d 222.168.193.79 --dport 110 -j DNAT --to 192.168.123.11:110 # POP3
/sbin/iptables -t nat -A PREROUTING -p TCP -i $EXTIF -d 222.168.193.79 --dport 113 -j DNAT --to 192.168.123.11:113 # auth
/sbin/iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE
這個問題雖然不算大,因為還能對外提供服務,但是因為即將對公司使用,基於使用者原則,想說還是解決得好,加上想說可以對自己的一些觀念能更清楚,故請賜教!!


答案在:
http://www.study-area.org/tips/NAT-HOWTO/NAT-HOWTO-chn-10.html

上次我在台南開講的 firewall 簡報, 也有專門提到過這個問題.

就觀念上來說─應該是 ping 的 host gateway redirect 的作用發揮了應有的功能?
您可以利用 DNS bind 9 的 view 功能,當內部網路要去造訪您 NAT
裡的服務主機時,DNS 解析出來的 IP 就是您內部主機的 IP
或同時改變內部封包的 Source Socket 。
詳見

http://www.study-area.org/linux/servers/linux_nat.htm

ICMP 的問題。


太好了,這個問題我也遇到了,但至今仍然無解,
剛剛得到老 jou 的關鍵字提示,搜尋了一下就找到不錯的資料了,

http://web.tp.edu.tw/phpBB2/viewtopic.php?p=1677


http://www.myunix.idv.tw/mx/forum/viewtopic.php?t=518&view=previous

下禮拜有空就來動工試試!

分享我個人的成功經驗,供大家參考!
NAT Server上面有3張網卡,eth0:public IP、eth1 192.168.0.1(連接Server LAN)、eth2 192.168.1.1(連接Client LAN)
我加了如下的規則以後,就一切ok了
#Client LAN connect to Server LAN
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth2 -p udp -s 192.168.1.0/24 -d (public IP) --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 80 -j DNAT --to 192.168.0.5:80
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 25 -j DNAT --to 192.168.0.5:25
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 110 -j DNAT --to 192.168.0.5:110
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 443 -j DNAT --to 192.168.0.5:443
參考看看囉!

weider 寫到:
/sbin/iptables -P INPUT DROP
/sbin/iptables -P INPUT ACCEPT
重複了,最後為準,你 rules 要補上
/sbin/iptables -A INPUT -j DROP
還是你只做 NAT ??
chaney 寫到:
分享我個人的成功經驗,供大家參考!
NAT Server上面有3張網卡,eth0:public IP、eth1 192.168.0.1(連接Server LAN)、eth2 192.168.1.1(連接Client LAN)
我加了如下的規則以後,就一切ok了
#Client LAN connect to Server LAN
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth2 -p udp -s 192.168.1.0/24 -d (public IP) --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 80 -j DNAT --to 192.168.0.5:80
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 25 -j DNAT --to 192.168.0.5:25
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 110 -j DNAT --to 192.168.0.5:110
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 443 -j DNAT --to 192.168.0.5:443
參考看看囉!
耶....把 eth2 也轉出去 NAT 怎樣?
weider 寫到:
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o $EXTIF -j MASQUERADE
_________________

HaWay 寫到:
耶....把 eth2 也轉出去 NAT 怎樣?
當然沒問題,早測試過了,一切ok
我把內容全部貼上來好了:
#NAT
echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source (public IP)
#Routing
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.5:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to 192.168.0.5:25
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to 192.168.0.5:110
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to 192.168.0.5:443
#Client LAN connect to Server LAN
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth2 -p udp -s 192.168.1.0/24 -d (public IP) --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 80 -j DNAT --to 192.168.0.5:80
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 25 -j DNAT --to 192.168.0.5:25
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 110 -j DNAT --to 192.168.0.5:110
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 443 -j DNAT --to 192.168.0.5:443
請多指教!

既然這樣, 下面兩行可以合成一行:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 53 -j DNAT --to 192.168.0.5:53
iptables -t nat -A PREROUTING -i eth2 -p tcp -s 192.168.1.0/24 -d (public IP) --dport 53 -j DNAT --to 192.168.0.5:53
修改後:
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to 192.168.0.5
其他句子亦同...
(注意之處:
要確定之前要有一行:
iptables -t nat -I PREROUTING -i eth1 -j ACCEPT)
關於 same subnet 的 DNAT 問題,
要看 iptables 的實作版本.
較新的版本并不需要額外再設 SNAT 了...
不過, 本篇看來, 樓主的環境并不是同一個 subnet 的問題...
因為有多片網路卡...
不管如何, 對 TCP/IP 的原理及 iptables 規則的理解, 才是解決問題的基本.
_________________


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12354/showart_108458.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP