之前使用的是无线路由让手机上网。学习了iptables后,尝试在非openwrt系统的Linux上实现相同功能。本文简单记录一下。 手上有块X86的板子,上面安装了Linux系统。几个月前研究了WIFI并实现了一个无线AP,最近又重新拾起了iptables,于是顺便让这个AP真正实现上网功能。文章《iptables学习笔记:端口转发之“内网访问外网”》的标题有“端口”二字,是因为其应用场合特殊,除了IP地址要转换外,还要指定端口号,但本文简化了应用场合,只需要进行地址转换即可正常上网。
一、Linux系统网络参数
首先要正确设置Linux系统的IP信息。设置默认网关(仅做示例):
1 | route add default gw 172.18.18.18 |
并且要设置好服务器DNS。添加(或修改)/etc/resolv.conf文件,内容示例如下:
1 | domain latelee.com.cn |
当然,如果是使用DHCP的话,上述操作自动完成,无须用户关注。
二、iptables地址转换
在Linux上使能转发,命令如下:
1 | echo "1" > /proc/sys/net/ipv4/ip_forward |
地址转换NAT:
1 | iptables -t nat -A POSTROUTING -j MASQUERADE |
注意,这里的命令不再指定具体地址,也不指定具体网络设备。 iptables表如下:
1 | # iptables -t nat -L |
三、无线AP
Linux系统可以使用dnsmasq实现DNS和DHCP功能。这样,当有PC或设备连接时则会自动分配IP地址。
dnsmasp配置文件如下(/tmp/ap/dnsmasq.conf):
1 | # Bind to only one interface |
在上述配置文件中,指定的网口为wlan0,这里WIFI的接口,如果是其它的则根据实际情况修改。执行命令示例如下:
1 | 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):
1 | beacon_int=100 |
执行命令示例:
1 | 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内容如下:
1 | # cat /etc/resolv.conf |
DNS服务器IP已经变成为运行dnsmasq所在的Linux系统了。
李迟 2016.10.12 周三 晚上