iptables学习笔记:使用NAT实现简单的无线AP
2017-08-02 19:20
621 查看
之前使用的是无线路由让手机上网。学习了iptables后,尝试在非openwrt系统的Linux上实现相同功能。本文简单记录一下。
手上有块X86的板子,上面安装了linux系统。几个月前研究了WIFI并实现了一个无线AP,最近又重新拾起了iptables,于是顺便让这个AP真正实现上网功能。文章《iptables学习笔记:端口转发之“内网访问外网”》的标题有“端口”二字,是因为其应用场合特殊,除了IP地址要转换外,还要指定端口号,但本文简化了应用场合,只需要进行地址转换即可正常上网。
[cpp] view
plain copy
route add default gw 172.18.18.18
并且要设置好服务器DNS。添加(或修改)/etc/resolv.conf文件,内容示例如下:
[cpp] view
plain copy
domain latelee.com.cn
search latelee.com.cn
nameserver 172.18.18.10
当然,如果是使用DHCP的话,上述操作自动完成,无须用户关注。
[cpp] view
plain copy
echo "1" > /proc/sys/net/ipv4/ip_forward
地址转换NAT:
[cpp] view
plain copy
iptables -t nat -A POSTROUTING -j MASQUERADE
注意,这里的命令不再指定具体地址,也不指定具体网络设备。
iptables表如下:
[cpp] view
plain copy
# 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
dnsmasp配置文件如下(/tmp/ap/dnsmasq.conf):
[cpp] view
plain copy
# 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的接口,如果是其它的则根据实际情况修改。执行命令示例如下:
[cpp] view
plain copy
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):
[cpp] view
plain copy
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
执行命令示例:
[cpp] view
plain copy
hostapd -B /tmp/ap/hostapd.conf -f /tmp/ap/hostapd.log
完成上述步骤后,即可以使用手机连接wifitest这个热点了,由于配置文件中隐藏了SSID,需要在手机“设置”页面中手动输出SSID和密码。
不过在单独测试dnsmasq,在一台设备上连接并用dhclient获取IP,发现/etc/resolv.conf内容如下:
[cpp] view
plain copy
# cat /etc/resolv.conf
nameserver 192.168.250.1
DNS服务器IP已经变成为运行dnsmasq所在的Linux系统了。
手上有块X86的板子,上面安装了linux系统。几个月前研究了WIFI并实现了一个无线AP,最近又重新拾起了iptables,于是顺便让这个AP真正实现上网功能。文章《iptables学习笔记:端口转发之“内网访问外网”》的标题有“端口”二字,是因为其应用场合特殊,除了IP地址要转换外,还要指定端口号,但本文简化了应用场合,只需要进行地址转换即可正常上网。
一、Linux系统网络参数
首先要正确设置Linux系统的IP信息。设置默认网关(仅做示例):[cpp] view
plain copy
route add default gw 172.18.18.18
并且要设置好服务器DNS。添加(或修改)/etc/resolv.conf文件,内容示例如下:
[cpp] view
plain copy
domain latelee.com.cn
search latelee.com.cn
nameserver 172.18.18.10
当然,如果是使用DHCP的话,上述操作自动完成,无须用户关注。
二、iptables地址转换
在Linux上使能转发,命令如下:[cpp] view
plain copy
echo "1" > /proc/sys/net/ipv4/ip_forward
地址转换NAT:
[cpp] view
plain copy
iptables -t nat -A POSTROUTING -j MASQUERADE
注意,这里的命令不再指定具体地址,也不指定具体网络设备。
iptables表如下:
[cpp] view
plain copy
# 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):
[cpp] view
plain copy
# 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的接口,如果是其它的则根据实际情况修改。执行命令示例如下:
[cpp] view
plain copy
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):
[cpp] view
plain copy
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
执行命令示例:
[cpp] view
plain copy
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内容如下:
[cpp] view
plain copy
# cat /etc/resolv.conf
nameserver 192.168.250.1
DNS服务器IP已经变成为运行dnsmasq所在的Linux系统了。
相关文章推荐
- iptables学习笔记:使用NAT实现简单的无线AP
- 使用if-else实现简单的登录注销(学习笔记)
- Netty学习笔记14 使用Netty-SocketIO 实现简单聊天室程序
- Silverlight学习笔记一(理解一下机制,使用一下布局,实现一个简单的用户登录)
- DayDayUp之HTML5学习笔记 二 使用header、aside、section、footer实现一个简单的界面
- node.js 学习笔记003 :使用superagent和cheerio实现简单网页爬虫
- Linux 防火墙iptables 学习笔记(四)iptables实现NAT
- ITCAST视频-Spring学习笔记(使用Spring的注解方式实现AOP的细节)
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- Jpcap包的学习笔记(八)如何使用Jpcap 包实现网络监听(下部)
- SilverLight学习笔记--使用WebClient实现通讯(二)(上传和下载流数据)
- Castle学习笔记----使用HQL语句实现复杂查询
- ITCAST视频-Spring学习笔记(使用CGLIB实现AOP功能与AOP概念解释)
- SL学习笔记之简单实现拖动2个元素自动合并
- D3D学习笔记之六---简单的动画实现。
- ITCAST视频-Spring学习笔记(使用Spring配置文件实现AOP)
- 学习新事物:使用jquery+xml实现ajax简单实例
- (学习笔记)简单正则表达式的使用实例[javascript]
- Unity 学习笔记(1) -- Unity简介及简单使用