2010年11月10日 星期三

Linux 無線 AP 架設

這篇文章使用的網路環境:
  1. 對外的網際網路連線為 PPPoE(ADSL或VDSL光纖),介面為 ppp0
  2. r8169 網卡 eth0 連接到寬頻的數據機
  3. rt73usb 無線網卡(Planex GW-US54Mini2),介面為 wlan0

我們的目標是讓無線網卡進入 AP 模式,並且透過 NAT 的方式讓無線裝置可以利用 ppp0 介面上網。首先 Linux 系統上必須先確定安裝了以下的套件:

  1. wireless-tools(iwconfig、iwlist等工具)
  2. linux-firmware(無線網卡的韌體)
  3. hostapd(無線AP服務)
  4. iptables(Linux 的NetFilter,我們需要它來做 NAT)

接下來編輯 /etc/hostapd/hostapd.conf 設定檔,其內容如下:

interface=wlan0
driver=nl80211
ssid=myap
hw_mode=g
channel=1
wpa=3
wpa_psk=95254362caf85a8b7521351858bd8d74070d27b04c8eab027af4a599a170a890

其中 driver 為 nl80211,指的是 Linux mac80211 based driver;wpa 指的是加密方式,wpa_psk為加密過的密碼字串,和wpa_supplicant一樣可以利用 wpa_passphrase 來取得。

設定完成後我們可以輸入以下的指令,設定 iptables 啟用 NAT 並執行 hostapd 啟用 AP 功能。

$ iptables -A INPUT -i wlan0 -j ACCEPT
$ iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
$ iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$ echo "1" > /proc/sys/net/ipv4/ip_forward
$ hostapd -B /etc/hostapd/hostapd.conf
$ ifconfig wlan0 192.168.0.1
$ dhcpd3 wlan0

192.168.0.0/24 代表的是以無線 AP 為閘道所構成的內部網域。為了方便,我們使用 DHCP 來自動分配 IP 位址給內網的電腦。以 Ubuntu 來說,DHCP server套件名稱為 dhcp3-server。在執行 dhcpd3 wlan0 之前,我們必須先設定 DHCP server,先利用文字編輯器開啟 /etc/dhcp3/dhcpd.conf,並將原本內建的基本範例改成以下內容:

subnet 192.168.0.0 netmask 255.255.255.0
{
 range 192.168.0.2 192.168.0.10;
 option routers 192.168.0.1;
 option domain-name-servers 168.95.192.1;
}

其中 range 是指網域中的主機分配 IP 範圍從 .2 ~ .10,router 是指定你的閘道,domain-name-servers就是 DNS server,這裡我們設定為使用 Hinet 的 DNS 主機。