之前使用的是无线路由让手机上网。学习了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 周三 晚上

Logo

更多推荐