動作

OB2D NAT

出自 Itsmw

NAT簡介

 本文介紹如何使用 OB2D/Ubuntu 來架設 NAT 主機,以解決各校 IPv4 位址不足的現象。目前各校所分配的 IPv4 Address 範圍有限,但電腦教室學生主機、E化教室以及行政電腦的上網需求卻愈來愈多,又加上南縣各校所建置的 NGN 專案無線 AP ,老師可以自帶筆電上網,導致學校 IPv4 Address 不足。而 IPv6 Address 尚未普及至全球,若單用 IPv6 Address 會造成某些點連線失敗,因此,我們仍建議各校可以建置 NAT 主機,以解決此一困境。

NAT 主機架設結構圖

DHCP虛擬IP供校內設備


 本文只介紹其建置過程,至於流量暨資安控管,請參考本站另一篇文章:防火牆管制連線



基本概念

 本文的 NAT 架設,簡單來講,就是用 Linux 來架設一台 IP 分享器。對外只需1個實體 IP ,對內卻可提供多組的 IP ,供整間電腦教室的電腦及網路設備,以虛擬 IP 上網,如同外面所賣的 IP 分享器一樣,它必須啟用 DHCP Server 以自動配送虛擬 IPv4 位址給終端設備。

 OB2D Server 的 NAT 功能,是利用 Netfilter 機制以 iptables指令達成的,它除了可以達成 IP 分享器的功能外,也可以鎖網路設備的 MAC 位置,令中毒的機器無法對外攻擊其他電腦。詳細做法,請參考下文。




網卡設定

基本觀念

  • 一定要兩張網卡
    • NAT 主機對 CPU 與 RAM 的要求不高,但是對網卡的要求較高,因此建議採用 INTEL 或 3COM 的網卡會較好,若真的有困難,至少要 RealTek 的 R8169(GB) 才可以。
    • 實體網卡的判別很簡單,打開終端機,把網路線插入,再下 dmesg 指令,若在訊息最下面看到「eth0: link becomes ready 」字樣,代表所插入的網卡介面是 eth0
    • 對外網卡使用實體 IPv4 位址
    • 對內網卡使用私有 IP 位址,網卡的設定值不得有 gateway 值。若 ubuntu 一定要輸入GateWay 才可儲存,可輸入私有 IP 位址,依本例其值為:192.168.1.1。
  • 依上述要求,主機網卡設定圖示如下


Nat netcard.png



Ubuntu 網卡設定方式

  • 叫出「網路連線」
    user@nat:~$ sudo nm-connection-editor
    • 第一張網卡設實體 IP
    • 第二張網設私有 IP
  • 當我們設妥兩張網卡(public and private)時,如何得知那張網卡是 eth0 ?那張是 eth1? 筆者建議的方式如下:
  1. 在兩張網卡設定完畢之後,先連其中一張卡
  2. 下指令 ifconfig ,不論你的線是在那個集線器上,只有插上線的卡會列出原本設定的 IP 位址。
    Which netcard1.png



OB2D 網卡設定方式

  • 修改 /etc/network/interfaces 內容示例如下
    root@nat:~# vi /etc/network/interfaces
auto lo eth0 eth1
iface lo inet 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

OB2D/Ubuntu DHCP Server安裝

  • 安裝 dhcp3-server 套件
    root@nat:# apt-get install dhcp3-server
  • 修改 /etc/default/isc-dhcp-server , 把要配送 ip 的網路卡代號寫入, 如下所例
INTERFACES="eth1"
  • OB2D sqz 及 Ubuntu 請注意,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/dhcp/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 {

}

OB2D sqz 記得改成 /etc/dhcp/dhcpd.conf


使用YHTools快速產生DHCP設定

  • 請先確認您已安裝 X-window 視窗環境,並以 root 身份,在終端機執行下列動作
  • 切換成 root
    user@nat:~$ sudo -i
  • root@nat:~# wget http://myip.tw/download/yhtools.tar.gz
  • root@nat:~# tar xzvf yhtools.tar.gz
  • root@nat:~# cd yhtools/dhcpconf
  • root@nat:~/yhtools/dhcpconf# ./dhcpconf.pyw
  • 點「確定」會產生 isc-dhcp-server 及 dhcpd.conf ,請分別放至上文中所提的位置



開始設定NAT

使用 YHTOOLS 快速設定 NAT 環境

  • 下載與解壓縮,在前面 dhcp 快速設定已完成
  • 使用前確認
    請再次網卡: eth0 及 eh1 網卡一為公用 IP 一為私有 IP,設定方可以參考本站 Ubuntu 11.04 文件。
  • 開始設定
  1. 切換成 root
    user@dns:~$ sudo -i
  2. root@nat:~# cd yhtools/firewall
  3. root@dns:~/yhtools/firewall/# ./fw4nat.pyw
  4. 依目前主機現況,例如對外網卡 eth0...等,填寫表單,並點「確定」,會在 /root/yhtools/firewall 底下產生 rc.local
  5. 按「Escape」離開本工具
  6. 檢視內容
    root@nat:~/yhtools/firewall/# vi rc.local
  7. 若沒問題,覆蓋到 /etc/rc.local
    root@dns:~/yhtools/firewall/# cp -rfp rc.local /etc
  8. 套用新規則列
    root@nat:~/yhtools/firewall/# service rc.local start
  9. 檢查封包轉送(NAT機制)是否成功
    root@nat:~# iptables -t nat -L    若出現下面字樣,就 OK 了。
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  anywhere             anywhere            to:192.168.1.1 



產生之 rc.local 內容 NAT 觀念解說

掛入 NAT 模組,啟動 IP 轉向(forward)功能

  • 修改 /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 及介面
###-----------------------------------------------------###
echo "Set external ......"
echo

# 不要忘了打開 FW_IFACE
FW_IP="163.26.108.132"
FW_IP_RANGE="163.26.108.128/25"
FW_IFACE="eth0"

###-----------------------------------------------------###
# 設定內部網段 IP 及介面
###-----------------------------------------------------###
echo "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
###-----------------------------------------------------###
#echo "Enable ip_forward ......"
#echo

echo "1" > /proc/sys/net/ipv4/ip_forward

......

###-----------------------------------------------------###
# 啟動內部對外轉址
###-----------------------------------------------------###

$IPTABLES -t nat -A POSTROUTING -o $FW_IFACE -j SNAT --to-source $FW_IP

  • 套用新規則列
    root@nat:~# service rc.local start
  • 檢查 NAT 是否已成功設定
    root@dns:~# iptables -t nat -L
  • 注意:改到此為止,只是啟動封包轉送功能,後續的通訊埠控管尚未處理。不過在南縣 NGN 的架構下,筆者建議只要做到此步驟就好,不必再設定通訊埠的控管,免得一些設備無法連線,反而成為網管的困擾。



鎖通訊埠原理

 前面的轉向做完,就已經可以轉送封包(虛擬 IP 可以上網)。但選用鎖通訊埠,本工具的運作原理是,預設所有 port 皆無法轉向,只有規則列上有「ACCEPT」的那幾個埠是允許通行的。

  • 鎖通訊埠的規則列,除了上面的內容外,會在 /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 --to 192.168.1.3:80
###-----------------------------------------------------###

###-----------------------------------------------------###
# 拒絕某一內部 IP 使用某一通道
###-----------------------------------------------------###


#--------------------------------------------------------------------
# NAT對外連線鎖 TCP 埠,思考方向:不管進入封包,只管出去封包
# 被動式 ftp 在經過 port 21 協商後,開始傳資料時,會以本地端 1024:65535 對 ftp server:1024:65535溝通,只要限制
# 連線狀態為:「RELATED」及「ESTABLISHED」封包。即可避免 NAT 內電腦對外掃描,又可使用 FTP 服務
#--------------------------------------------------------------------
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 21 -j ACCEPT
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 對外 SSH 連線
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 22 -j ACCEPT
# 對外 SMTP 寄信
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 25 -j ACCEPT
# 對外 DNS 查詢
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 53 -j ACCEPT
# 對外瀏覽網頁(含某些特定通報點採81埠)
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 80:81 -j ACCEPT
# POP3 收信
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 110 -j ACCEPT
# NTPDate 網路校時
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 123 -j ACCEPT
# HTTPS
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 443 -j ACCEPT
# VNC → TCP port range: 5900 ~ 5906
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 5900:5906 -j ACCEPT
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 --dport 8080 -j ACCEPT
$IPTABLES -A FORWARD -o $FW_IFACE -p tcp -s any/0 -j DROP

#--------------------------------------------------------------------
# UDP 埠的部分
#--------------------------------------------------------------------
# DNS查詢
$IPTABLES -A FORWARD -o $FW_IFACE -p udp -s any/0 --dport 53 -j ACCEPT
# VOIP電話
$IPTABLES -A FORWARD -o $FW_IFACE -p udp -s any/0 --dport 5060:5061 -j ACCEPT
$IPTABLES -A FORWARD -o $FW_IFACE -p udp -s any/0 --dport 41000:41999 -j ACCEPT
$IPTABLES -A FORWARD -o $FW_IFACE -p udp -s any/0 --dport 55000:65000 -j ACCEPT
$IPTABLES -A FORWARD -o $FW_IFACE -p udp -s any/0 -j DROP


###-----------------------------------------------------###
# 拒絕外部 IP 連至內部 port 號
###-----------------------------------------------------###
......




本文小檔案

__NORICHEDITOR__

題名: Title::用 OB2D 架設 NAT 主機
作者: Creator::itsmw作者群
主題/關鍵詞: Subject::nat, firewall, iptables
簡述: Description::用 OB2D 架設 NAT 主機
出版者: Publisher::台南縣教網中心 itsmw 計畫
其他參與者: Contributor::itsmw作者群
日期: Date::2010-7-8
文件類型: Type::07網路相關
Type::09資訊安全
資料格式: Format::text/html
文件識別代號: Identifier::http://myip.tw/itsmw/index.php?title=OB2D_NAT
來源: Source::http://myip.tw/itsmw/index.php/OB2D_NAT
語言: Language::zh-TW
相關資源: Relation::http://myip.tw/b2ddoc/LinuxBase
文件涵蓋範圍: Coverage::Linux平台
版權規範: Rights::GNU Free Documentation License 1.2