1. 程式人生 > >iptables學習筆記:使用NAT實現簡單的無線AP

iptables學習筆記:使用NAT實現簡單的無線AP

之前使用的是無線路由讓手機上網。學習了iptables後,嘗試在非openwrt系統的Linux上實現相同功能。本文簡單記錄一下。

手上有塊X86的板子,上面安裝了Linux系統。幾個月前研究了WIFI並實現了一個無線AP,最近又重新拾起了iptables,於是順便讓這個AP真正實現上網功能。文章《iptables學習筆記:埠轉發之“內網訪問外網”》的標題有“埠”二字,是因為其應用場合特殊,除了IP地址要轉換外,還要指定埠號,但本文簡化了應用場合,只需要進行地址轉換即可正常上網。

一、Linux系統網路引數

首先要正確設定Linux系統的IP資訊。設定預設閘道器(僅做示例):

route add default gw 172.18.18.18
並且要設定好伺服器DNS。新增(或修改)/etc/resolv.conf檔案,內容示例如下:
domain latelee.com.cn
search latelee.com.cn
nameserver 172.18.18.10

當然,如果是使用DHCP的話,上述操作自動完成,無須使用者關注。

二、iptables地址轉換

在Linux上使能轉發,命令如下:

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

地址轉換NAT:

iptables -t nat -A POSTROUTING -j MASQUERADE

注意,這裡的命令不再指定具體地址,也不指定具體網路裝置。

iptables表如下:

# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere 

三、無線AP

Linux系統可以使用dnsmasq實現DNS和DHCP功能。這樣,當有PC或裝置連線時則會自動分配IP地址。

dnsmasp配置檔案如下(/tmp/ap/dnsmasq.conf):

# Bind to only one interface
bind-interfaces
# Choose interface for binding
interface=wlan0
# Specify range of IP addresses for DHCP leases
dhcp-range=192.168.250.1,192.168.250.200,255.255.255.0,12h
#INTERFACE_NET=wlan0

在上述配置檔案中,指定的網口為wlan0,這裡WIFI的介面,如果是其它的則根據實際情況修改。執行命令示例如下:
dnsmasq -C /tmp/ap/dnsmasq.conf -x /tmp/ap/dnsmasq.pid -l /tmp/ap/dnsmasq.leases
無線AP使用hostapd提供WIFI熱點服務,可以參考筆者文章《Ubuntu14.04系統hostapd編譯及使用》。

下面給出hostapd配置檔案如下(/tmp/ap/hostapd.conf):

beacon_int=100
interface=wlan0 # 網口
driver=nl80211
ssid=wifitest # WIFI名稱
channel=0
max_num_sta=2 # 客戶最大連線數
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=1 # 隱藏SSID
wpa=2
wpa_passphrase=12345678910 # 密碼
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
country_code=CN
ieee80211d=1
ieee80211h=1
hw_mode=g
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]
wmm_enabled=1
force_40mhz=1 # powered by Late Lee

執行命令示例:

hostapd -B /tmp/ap/hostapd.conf -f /tmp/ap/hostapd.log 

完成上述步驟後,即可以使用手機連線wifitest這個熱點了,由於配置檔案中隱藏了SSID,需要在手機“設定”頁面中手動輸出SSID和密碼。

四、其它

連線WIFI熱點後,在手機執行cat /etc/resolv.conf 提示沒有該檔案,執行ifconfig也沒資訊輸出,由於對android不熟悉,就不深究了。

不過在單獨測試dnsmasq,在一臺裝置上連線並用dhclient獲取IP,發現/etc/resolv.conf內容如下:

# cat /etc/resolv.conf 
nameserver 192.168.250.1
DNS伺服器IP已經變成為執行dnsmasq所在的Linux系統了。

李遲 2016.10.12 週三 晚上