2010年3月24日 星期三

Ubuntu + Shorewall + dnsmasq = NAT

撇開在台中的機器硬碟可能掛掉不說,
買了新的KVM,整理好同事捐贈的機器,
Acorp的準系統,主機板是4S661QP,
台灣的網頁已經把所有準系統相關的資料都拿掉了,
看樣子它變孤兒了= =

買了兩顆CPU,P4 2.4G/533、P4 2.4G/800 HT
沒想到我的NB最高只能吃到533,這顆FSB800的P4就給準系統用了Orz

我自己的電腦也升級了,
空出的SATA卡也裝上準系統,
掛了一顆IDE 40G + 有點壞軌的SATA 160G,
作Software Raid,目前穩定運作中。
只是沒想到,我Raid才弄好,台中的硬碟就不等我先走Q.Q
等硬碟拿到手要再做最後的努力,
說不定是我哥搞烏龍= =

Ubuntu Server裝好,相關的Service也設定告一段落,
只是想放AP,AP卻在台中,
既然就拿準系統當Server用了,
那就順便弄個NAT吧:)


作業系統:Ubuntu Server
防火牆、Router Service:Shorewall
DHCP、DNS:dnsmasq

選擇Shorewall主要的原因如下
  1. 設定簡單,起碼比iptables簡單= =
  2. Command Line Interface,因為Ubuntu Server預設沒有安裝Xwindow
  3. 資源中等,起碼找的到一些中文資料

參考:
筆記:使用shorewall和dnsmasq在Ubuntu架設簡單的NAT
[ubuntu]設定 shorewall 3.x
Basic Two-Interface Firewall


環境:
我只有一張網卡,因為唯一一條PCI拿來插SATA介面卡,
所以實體網路跟區域網路不做實體隔離,
反正用戶單純,我可以自己掌控。
loc:eth0
net:ppp0

步驟如下

  1. 首先安裝shorewall跟dnsmasq
    sudo apt-get install shorewall dnsmasq
  2. 將機器先設定為固定的IP
    編輯/etc/network/interfaces
    auto eth0
    iface eth0 inet static
    address 192.168.0.254
    netmask 255.255.255.0
    sudo /etc/init.d/networking restart
  3. ubuntu安裝shorewall之後,/etc/shorewall這個資料夾會是空的,所以要手動複製設定檔
    sudo cp /usr/share/doc/shorewall-common/default-config/* /etc/shorewall/
  4. 因為要設定成兩個介面的NAT,所以接著複製軟體提供的預設範本
    sudo cp /usr/share/doc/shorewall-common/examples/two-interfaces/* /etc/shorewall/
  5. two-interfaces預設為三個區域,分別是fw、net、loc,
    接著要為這幾個區域分別指定裝置,修改interfaces
    #ZONE INTERFACE BROADCAST OPTIONS
    net ppp0 detect dhcp,tcpflags,routefilter,nosmurfs,logmartians
    loc eth0 detect tcpflags,nosmurfs,dhcp
    (如果要在同一台機器上跑DHCP Server,要增加dhcp這個設定)
  6. 接下來,修改policy,設定不同區域之間的連線規則
    因為這台機器上跑Ubuntu,還要連網路更新,
    將$FW net REJECT info 改成$FW net ACCEPT
    這規則應該不難理解:)
  7. 設定開啟的服務,或是設定防火牆的例外規則,修改rules
    SSH/ACCEPT net $FW
    Web/ACCEPT net $FW
    DNS/ACCEPT net $FW
  8. 其他設定:
    /etc/default/shorewall
    STARTUP=1
    /etc/shorewall/shorewall.conf
    STARTUP_ENABLED=Yes
    SUBSYSLOCK=/var/lock/subsys/shorewall
    我安裝的shorewall的版本有這個錯誤,設定的這個Path不存在,會有錯誤
    解決方法:
    將路徑指向實際存在的目錄,例如SUBSYSLOCK=/var/lock/shorewall

  9. 最後~
    sudo shorewall start 啟動
    sudo shorewall stop 關閉
    sudo shorewall restart 重新啟動
    sudo shorewall clear 清除規則
    啟動shorewall,這個時候shorewall附帶的SNAT應該也開始運作了,
    找一台電腦,手動指定IP,設定在同一個網段底下,Gateway指向Server,
    分別Ping Server跟Ping外部IP,看NAT是否有正常運作

如果NAT正常,
接著再來設定dnsmasq,

  1. 修改/etc/dnsmasq.conf,加上:
    interface=eth0
  2. sudo /etc/init.d/dnsmasq restart
基本上,我應該只有改這個= =
測試DHCP跟DNS,
DHCP如果撈不到回應,回頭檢查shorewall的dhcp option有沒有加,
DNS直接使用nslookup去做指定伺服器查詢,
看有沒有回應正確的IP正解。

如果都正常,
基本這台機器就算是IP分享器了,
有機會再來裝無線網卡當AP用,
該趕一點報告了,火燒屁股了說Orz

2010年3月22日 星期一

SIS900網路卡在Linux下無法連線?!

這兩天在同事捐贈的機器上安裝Ubuntu Server碰到的問題,
OS抓不到SIS900的Mac address,下指令ifconfig -a會出現SIS900這個裝置,
但是在HWaddress的欄位是FF:FF:FF:FF:FF:FF或00:00:00:00:00:00,
然後網路怎樣都連不上去= =

如何驗證?
  1. lspci 確認是否有出現SIS900這個device,沒有的話請檢查BIOS或是硬體
  2. lsmod 確認是否有SIS900這個module,沒有的話代表沒抓到或是沒驅動
  3. dmesg|grep eth 有出現對應的訊息?
  4. ifconfig -a 有出現SIS900這個chip但hwaddress的值是錯誤的?

解決方法
編輯/etc/network/interfaces
指定Mac address
例:
#auto eth0
iface eth0 inet dhcp
hwaddress ether 00:E0:18:B3:A0:F7

需要注意事項
hwaddress前面需要加個tab
如果機器在實體網路上,需要考慮Mac address衝突的問題,
但如果是在虛擬網段,同網段沒有重複編號的網卡就沒有這個問題,
或是想辦法寫入實際的網路卡Mac address,
例如從Windows底下看?