如何使用Linux架設NAT主機(Linux主機伺服器架設技術)
如何使用Linux架設NAT主機(Linux主機伺服器架設技術)
如何使用 Linux 來架設NAT主機,可以解決 IPv4 位址不足的現象。
目前所分配的 IPv4 Address 範圍有限,所建置的 NGN 專案無線 AP ,導致 IPv4 Address 不足。
而 IPv6 Address 尚未普及至全球,若單用 IPv6 Address 會造成某些點連線失敗,因此,我們仍建議可以建置 NAT 主機,以解決此一困境。
NAT主機基本概念:
NAT 簡單來講,就是用 Linux Server 來架設一台 IP 分享器。
對外只需1個實體 IP ,對內卻可提供多組的 IP ,供整間電腦教室的電腦及網路設備,以虛擬 IP 上網,如同外面所賣的 IP 分享器一樣,它必須啟用 DHCP Server 以自動配送虛擬 IPv4 位址給終端設備。
Linux Server 的 NAT 功能,是利用 Netfilter 機制以 iptables指令達成的,它除了可以達成 IP 分享器的功能外,也可以鎖網路設備的 MAC 位置,令中毒的機器無法對外攻擊其他電腦。
詳細做法,請參考下文。
實作:
網卡設定
* 一定要兩張網卡
NAT 主機對 CPU 與 RAM 的要求不高,但是對網卡的要求較高,因此建議採用 INTEL 或 3COM 的網卡會較好,若真的有困難,至少要 RealTek 的 R8169(GB) 才可以。
實體網卡的判別很簡單,打開終端機,把網路線插入,再下 dmesg 指令,若在訊息最下面看到「eth0: link becomes ready 」字樣,代表所插入的網卡介面是 eth0 。
對外網卡使用實體 IPv4 位址
對內網卡使用虛擬 IP 位址,網卡的設定值不得有 gateway 值
* 依上述要求,主機網卡設定圖示如下
* 修改 /etc/network/interfaces 內容示例如下
root@nat:~# vi /etc/network/interfaces
autleth0 eth1
iface linet loopback
iface eth0 inet static
address 163.26.108.132
network 163.26.108.128
netmask 255.255.255.128
broadcast 163.26.108.255
gateway 163.26.108.254
iface eth1 inet static
address 192.168.1.1
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
啟動DHCP Server
* 安裝 dhcp3-server 套件
root@nat:# apt-get install dhcp3-server
* 修改 /etc/default/dhcp3-server , 把要配送 ip 的網路卡代號寫入, 如下所例
INTERFACES=”eth1″
* Linux sqz 請注意,dhcp3-server 套件已改成 isc-dhcp-server (但安裝時仍是 apt-get install dhcp3-server)
啟動程式可能變成 /etc/init.d/isc-dhcp-server
root@dns:~# service isc-dhcp-server start|stop
設定檔位置會變成 /etc/dhcp
實際位置可以下指令
root@dns:~# dpkg -L isc-dhcp-server 列出套件檔案列表得知
* 修改 /etc/dhcp3/dhcpd.conf , 加至檔尾(以配送 192.168.1.0 為例)
# This is a very basic subnet declaration.
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.51 192.168.1.200 ;
option broadcast-address 192.168.1.255 ;
option routers 192.168.1.1 ;
option domain-name-servers 168.95.1.1, 168.95.192.1 ;
}
# 若要分配的是虛擬 IP, 這邊要手動額外加入網段
subnet 163.26.108.128 netmask 255.255.255.128 {
}
Linux sqz 記得改成 /etc/dhcp/dhcpd.conf
修改防火牆規則列
* 修改 /etc/rc.local 下面所列的部分,皆是要修改的項目
root@nat:~# vi /etc/rc.local
# 打開下面這四行
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
……
###—————————————————–###
# 設定外部網段 IP 及介面
###—————————————————–###
ech”Set external ……”
echo
# 不要忘了打開 FW_IFACE
FW_IP=”163.26.108.132″
FW_IP_RANGE=”163.26.108.128/25″
FW_IFACE=”eth0″
###—————————————————–###
# 設定內部網段 IP 及介面
###—————————————————–###
ech”Set internal ……”
echo
LAN_IP=”192.168.1.1″
LAN_IP_RANGE=”192.168.1.0/24″
LAN_BCAST_ADRESS=”192.168.1.255″
LAN_IFACE=”eth1″
……
###—————————————————–###
# 打開 forward
###—————————————————–###
#ech”Enable ip_forward ……”
#echo
ech”1″ > /proc/sys/net/ipv4/ip_forward
……
###—————————————————–###
# 啟動內部對外轉址
###—————————————————–###
$IPTABLES -t nat -A POSTROUTING -$FW_IFACE -j SNAT –to-source $FW_IP
* 套用新規則列
root@nat:~# service rc.local start
* 檢查 NAT 是否已成功設定
root@dns:~# iptables -t nat -L
* 注意:改到此為止,只是啟動封包轉送功能,後續的通訊埠控管尚未處理。不過在南縣 NGN 的架構下,筆者建議只要做到此步驟就好,不必再設定通訊埠的控管,免得一些設備無法連線,反而成為網管的困擾。
通訊埠管制
不管制的作法
這個比較簡單,原 Linux 上的 /etc/rc.local 只要修改到可以轉送封包(虛擬 IP 可以上網),後面的規則保留不動,那就對了。
鎖通訊埠作法
* 繼續修改規則列 /etc/rc.local
* 維持 INPUT, OUTPUT, FORWARD 是開放,不必改,再把下面紅字的規則列加到範例中所示的位置
……
###—————————————————–###
# 啟動外部對內部轉址
###—————————————————–###
# 凡對 $FW_IP:8080 連線者, 則轉址至 192.168.1.3:80
#$IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP –dport 8080 -j DNAT –t192.168.1.3:80
###—————————————————–###
###—————————————————–###
# 拒絕某一內部 IP 使用某一通道
###—————————————————–###
#——————————————————————–
# NAT對外連線鎖 TCP 埠,思考方向:不管進入封包,只管出去封包
# 被動式 ftp 在經過 port 21 協商後,開始傳資料時,會以本地端 1024:65535 對 ftp server:1024:65535溝通,只要限制
# 連線狀態為:「RELATED」及「ESTABLISHED」封包。即可避免 NAT 內電腦對外掃描,又可使用 FTP 服務
#——————————————————————–
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 21 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –sport 1024:65535 –dport 1024:65535 -m state –state RELATED,ESTABLISHED -j ACCEPT
# 對外 SSH 連線
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 22 -j ACCEPT
# 對外 SMTP 寄信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 25 -j ACCEPT
# 對外 DNS 查詢
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 53 -j ACCEPT
# 對外瀏覽網頁(含某些特定通報點採81埠)
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 80:81 -j ACCEPT
# POP3 收信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 110 -j ACCEPT
# NTPDate 網路校時
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 123 -j ACCEPT
# HTTPS
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 443 -j ACCEPT
# VNC → TCP port range: 5900 ~ 5906
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 5900:5906 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 8080 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 -j DROP
#——————————————————————–
# UDP 埠的部分
#——————————————————————–
# DNS查詢
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 53 -j ACCEPT
# VOIP電話
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 5060:5061 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 41000:41999 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 55000:65000 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 -j DROP
###—————————————————–###
# 拒絕外部 IP 連至內部 port 號
###—————————————————–###
……