Ubuntu Server 12.04 LTS 設定 iptables 實現 NAT Server

情境:實驗室的 AP 原本有一個實體 IP,由於想讓實驗室其他設備也可以有網路但是不要佔用實體 IP,所以想架一個 NAT Server

環境與 IP 配置:

NAT Server: Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic x86_64)
-eth0: 對外,有一實體 IP (140.xxx.xxx.xxx)
-eth1: 對內,有一虛擬 IP (10.0.10.1)
                  [不用 192.168.x.x 或 173.16.xxx.xxx 沒有特別原因]

AP: TP-LINK TL-WR940N
-WAN: 對外,連接至 NAT Server 10.0.10.2
-LAN: 對內,DHCP 派發至各設備 192.168.x.x


設定:

1. 設定 “/etc/network/interfaces":
# The primary network interface
#external interface
auto eth0
iface eth0 inet static
  address 140.xxx.xxx.xxx
netmask 255.255.255.0
network 140.xxx.254.0
broadcast 140.xxx.xxx.255
gateway 140.xxx.xxx.254
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 140.xxx.1.110
dns-search nat

#internal interface
auto eth1
iface eth1 inet static
address 10.0.10.1
broadcast 10.0.10.255
netmask 255.255.255.0
network 10.0.10.0

2. 設定好網路,重新啟動網路:sudo /etc/init.d/networking restart

3. 假如沒有 iptables ,安裝方式: sudo apt-get install iptables

4. 清理 iptables:
iptables –flush
iptables –table nat –flush
iptables –delete
iptables –table nat –delete-chain

5. 設定 IP Forwarding and Masquerading
iptables –table nat –append POSTROUTING –out-interface eth0 -j MASQUERADE
iptables –append FORWARD –in-interface eth1 -j ACCEPT

6. 啟動 forwarding 服務
echo “1″ > /proc/sys/net/ipv4/ip_forward

7. 因為每次重新開機,iptables 就會重置,所以要將 iptables 存起來
iptables-save

8. 為了要每次重新開機後能自動啟動 forwarding 服務
    所以要在 /etc/rc.local 或 /etc/rc.d/rc.local 寫入:
echo “1″ > /proc/sys/net/ipv4/ip_forward

※ 步驟 3 ~ 4 需要 sudo 權限,可以 sudo bash 或寫成腳本後一次 sudo,就不用每次都多打 sudo

#LAN
IP Address: 192.168.0.1
Subnet Mask: 255.255.255.0

#WAN
WAN Connectoin Type: Static IP
IP Address: 10.0.10.2
Subnet Mask: 255.255.255.0
Default Gateway: 10.0.10.1  (設為 NAT Server 的,才能夠讓 AP 將封包 router 到 NAT Server)
Primary DNS: 8.8.8.8 (有設定 DNS 才能解析域名)

這樣設定完後,不需重新啟動 AP 就可對外連線了!

進一步研究:Firewall 應該也是這樣架,原理應該差不多

參考資料:
1. NAT 原理 http://linux.vbird.org/linux_server/0250simple_firewall.php
2. NAT 設定 http://raypenglife.blogspot.tw/2006/03/linuxnat.html
3. Virtual IP Range
http://joechuang.wordpress.com/2008/10/27/%E4%BD%95%E8%AC%82%E5%AF%A6%E9%AB%94-ip-%E8%99%9B%E6%93%AC-ip/

讓電腦成為Router

繼前一篇-利用RJ45跳線連接兩台電腦-的相同理由,本來只是想要讓筆電可以操作桌機的系統,後來就想進一步讓桌電可以透過筆電連出去網際網路。

第一步是開啟網路連線 ( 開啟網路共用中心 \ 變更介面卡設定 )
在已經連線的網路項目上按右健,如下圖,這是比電上的網路連線,目前無線網路連線到的是中華電信的Wifi AP – cht9147,區域網路是連線到另一台沒有連接任和網際網路的電腦上,進入內容中

切換到『共用』的標籤,並將『允許其它網路使用者透過這台電腦的網際網路連線來連線』勾起來


當勾選了以後按下確定,會跳出此訊息,意思是要警告你有可能其它與這台電腦連接的電腦,會失去連線 (對原理沒興趣的人可以跳過這部分解說直接按"是"),例如我的區域連線項目,是連線到一台沒有連接任何網際網路的電腦B,我指定給那台電腦B的固定IP192.168.1.2,這樣的話這台電腦A就可以透過跳線連接到電腦B
而這個視窗是說,當設定共用網際網路以後,我的乙太網卡(LAN介面卡)IP會設定為192.168.137.1 (因為這台電腦被設定為router,需要以它的網卡作為子網路的router interface,也就是子網路的預設閘道,所以末碼是1,這個IPWindows保留作為VPN DNS Default Gateway),這樣會導致電腦B無法辨識到電腦A,因為他們是透過跳線連接的,解決辦法是把電腦B的靜態IP改成自動取得IP (稍後講解)

設定好共用的網路項目會在網路名稱後面加註『共用的』










網路芳鄰中的這個新項目就是目前這台主機,因為他的LAN介面卡被設定為gateway了,此外,共用項目仍然可以繼續連線














在電腦B上,原本的IP設定為固定的



須修改為自動 (router) 取得IP (透過DHCP協定)

按下確定以後,電腦B就會自動偵測網路,成功連線了喔!






利用RJ45跳線連接兩台電腦

因為桌機沒有無線網路卡,又懶得再牽長線和設定上網,突然想要來試試看用跳線連接兩台電腦,這樣我就可以使用另桌機的資源,只需要讓筆電上網就好。

現在已經很少人直接這樣連接電腦,連早期的RS-232Hub也都被RouterSwitch取代了(下次想玩玩看RS-232),網路上普遍找到的是跳線的教學,設定的資料不多。

首先還是簡單介紹一下兩種不同的RJ-45埠雙絞線線序規格,也就是RJ-45接頭內色線的排列方式,有兩種,一種是TIA/EIA-568-A (簡稱T568A),另一種是TIA/EIA-568-B (簡稱T568B)

如上圖所示,當我們要做一般網路線,連接電腦與HubRouterSwitch等網路設備時,RJ-45的兩端都要是568B的線序;而當我們要連接兩台電腦或是連接兩台網路設備時,兩端分別要是AB,後者即所謂的『跳線』(跳線只是一種稱呼,不是只有RJ-45可以做為跳線)

壓好線以後,如果沒有儀器測試是否壓成功,就直接接上兩台有開機的電腦吧,如果是成功的,則網路孔旁邊的燈就會亮起來了。

接著要做設定,這裡我的實驗結果是,會有AB端的差異,以下稍微列一下兩台機器的資料。


根據搜尋到的資料,首先要打開網路共用中心,切換到變更介面卡網路設定,假設你只有一張網路卡,那麼『區域連線』這個項目應該會開始辨識網路,或辨識完成顯示著『無法辨識的網路』,這是正常的,事實上,我實驗的結果是,不指定IP也是可以互相ping得到和共用,網頁也會通,因為自動取得IP位址還是會使兩台電腦擁有同一網域下的IP,只是每次重啟用區域連線IP有可能會改變,所以要固定IP的話可以對兩台電腦分別設定如下:

設定好以後,還要檢查兩個地方的設定,才能進行共用

1.    開起網路共用中心,左方選項中有一個『變更進階共用設定』,因為我們連接兩台電腦所用的群組是WORKGROP(共用群組不想改名字就用預設的 WORKGROUP就好),所以要設定『公用』中的共用項目,『網路探索』是讓網芳上面的其它主機可以知道你的存在,也就是在他們的網芳中可以看到你的電腦;『檔案及印表機共用』、『公用資料夾共用』、『媒體串流』這些項目是用來設定要分享的檔案;『檔案共用連線』、『以密碼保護的共用』是用來設定共用連線的一些進階保護功能

2.    開啟控制台,進到『系統及安全性』,在『Windows防火牆』的項目中,選擇『允許程式通過Windows防火牆』,像是『檔案及印表機共用』、『遠端桌面』、『Windows Media Player網路共用服務』…等等項目,甚至是其他如『Apache』等等,如果要讓另一台電腦可以連線,則這些項目在右方的『公用』處打勾。
設定好以後,就可以來實際測試看看囉!

VECK-STUDIO的網芳上,可以見到自己與VECK-PC

VECK-PC上的網芳畫面

<公用資料夾>

VECK-STUDIO上共用VECK-PC的桌面檔案











VECK-PC上共用VECK-STUDIO的桌面










VECK-STUDIO上連VECK-PCApache站台
VECK-STUDIO上連VECK-PCIIS站台
VECK-PC上連VECK-STUDIOApache站台





子網路遮罩 與 預設閘道 的功用

子網路遮罩主要是用來辨識某部主機所處的子網路。
( subnet mask )

電腦傳送封包時, 必須判斷目的電腦是否位於相同的子網路
若不是在同一個子網路, 則必須先將封包送至路由器, 由路由器轉送至目的子網路

而判斷的方法就是靠子網路遮罩:
當傳送端要傳送時,他的網哪會將來源位址及目的位址分別與子網路遮罩做二進位的 AND 運算,如此就可以判斷該封包的目的地是否是在與傳送端同一個子網路中

(子網路遮罩表示法跟網段很像,都是後面用/標示兩個數字,但意義不同喔!)

————————————————————————————————————

預設閘道 主要是用在一個子網路中,定位 router 位址用的
( default gateway )

一個子網路會由一個 router 的介面做分割,根據資料鏈結層學到的 ARP 觀念
ARP 是在同一個子網路中,用來做 IP 與 MAC 對照轉換的協定

當一個子網路中的主機要傳封包給其他子網路的主機
它的 ARP table 勢必不會有目的地主機的MAC address
因此他必須將 ARP 詢問封包傳送到router去得到routerMAC
ARP 的運作是廣播要找的接收端 IP
每個子網路中的主機(包含 router ) 會檢查 ARP 封包,比對其中的接收端 IP 與自己的是否相同
唯一相同的那台主機會回傳包含自己 MAC 的 ARP 封包至傳送端
(by IP address in received ARP pkt.)
根據 ARP 的原理,傳送端在同子網路中是用廣播方式詢問MAC Address
但現在目的端的 MAC 不會在子網路中(這個可以由上面的子網路遮罩判斷)
所以傳送端的 ARP 模組就會直接丟給 router
(所以課本中會說指定的 MAC 會是 router 的 MAC,在廣播時就只有 router 會回應)

而指定預設閘道就是為了讓傳送端的 ARP 知道router的 IP 是哪一個
在經過一次的 request 後,就可以更新 ARP table
然後就永久知道 router 的 MAC address
如此一來下一次就不用再傳送 ARP 詢問了