Linux下使用iptables架設簡單NAT Server(for CentOS 5.5)

 

  

上圖為我們的環境架構。

 

我們主要的設定皆在NAT Server(CentOS 5.5)上,對外IP使用10.237.0.1 (eth0),對內IP使用192.168.191.254(eth2)

情境: 今天我們架設一台Web Server(IP: 192.168.191.10)在內部網路,而我們希望這台Web Server可以被外部網路(10.237.0.0/24)的PC看到網頁(http://10.237.0.1:8080/),並且此Web Server也可以與外部網路有所聯繫。

考慮: 
1. Web Server連到外部網路(10.237.0.1): 必須把經由NAT Server的封包Source由192.168.191.10轉成10.237.0.1
2. 外部網路(10.237.0.1)連到Web Server網頁: 必須把進到NAT Server的封包Destination由10.237.0.1且port 8080轉成192.168.191.10且port 80

 

# vim /etc/sysconfig/network
—————————————————
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=Nat.localdomain
GATEWAY=10.237.0.254
—————————————————

 

設定連結到外部網路的interface
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
—————————————————
......
IPADDR=10.237.0.1
NETMASK=255.255.255.0
—————————————————

 

設定連結到內部網路的interface
# vim /etc/sysconfig/network-scripts/ifcfg-eth2
—————————————————
......
IPADDR=192.168.191.254
NETMASK=255.255.255.0
—————————————————

 

開啟NAT功能, Session連線數量與Session timeout時間
# vim /etc/sysctl.conf
—————————————————
......
net.ipv4.ip_forward = 1
......
net.ipv4.netfilter.ip_conntrack_max = 1048576
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 86400  #單位: 秒
net.ipv4.tcp_keepalive_time = 86400      #單位: 秒
—————————————————

 

觀看sysctl.conf的設定, 以及 對sysctl.conf檔案生效
# sysctl -p

# service network restart

# iptables -F

設定如何處理經由NAT Server出去到外部網路的封包(更改由NAT Server出去的封包Source IP位址)
# iptables -t nat -A POSTROUTING -s 192.168.191.0/24 -o eth0 -j SNAT –to 10.237.0.1

設定如何處理經由NAT Server進入到內部網路的封包(更改由NAT Server進入的封包Destination IP位址與Port)
# iptables -t nat -A PREROUTING -d 10.237.0.1 -i eth0 -p tcp –dport 8080 -j DNAT –to 192.168.191.10:80

# iptables -P FORWARD ACCEPT

# iptables -P OUTPUT ACCEPT

# iptables -P INPUT ACCEPT

儲存iptables裡nat table的設定
# /etc/init.d/iptables save

# service iptables restart

 

如何看NAT設定:
1. # iptables -t nat -L -n
    或
2. # vim /etc/sysconfig/iptables

 

修改iptables設定檔, 讓NAT內的所有電腦可以對外使用FTP

前提要內部所有電腦皆可以藉由NAT Server(iptables已設定好規則)對外連上internet.

1. 加入模組(Modules): ip_nat_ftp與ip_conntrack_ftp,Module與Module之間要使用空白鍵隔開。

# vim /etc/sysconfig/iptables-config—————————————————
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_nat_ftp ip_conntrack_ftp"
—————————————————

 

2. 重新啟動iptables

# service iptables restart