linux 开启制作无线路由器(ubuntu 1404)

  • 确定笔记本网卡支持 master 模式
    执行 iw list  命令,执行结果中有下面的内容,说明这张网卡是支持做 ap 路由的(AP   AP/VLAN)
    1. Supported interface modes:  
    2. * IBSS  
    3.    * managed  
    4.    * AP  
    5.    * AP/VLAN  
    6.    * WDS  
    7.    * monitor  
    8.    * mesh point  
    9.    * P2P-client  
    10.    * P2P-GO  
     Supported interface modes:
    	* IBSS
        * managed
        * AP
        * AP/VLAN
        * WDS
        * monitor
        * mesh point
        * P2P-client
        * P2P-GO


  • 开启 AP
    安装 hostapd 软件包
    1. apt-get install hostapd  
    apt-get install hostapd
    配置 hostapd (/etc/hostapd/hostapd.conf)
    1. macaddr_acl=0                      # 可选,指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部RADIUS服务器;  
    2. # accept_mac_file:指定允许MAC列表文件所在;  
    3. # deny_mac_file:指定禁止MAC列表文件所在;  
    4. auth_algs=1                         # 采用 OSA 认证算法  
    5. ignore_broadcast_ssid=0  
    6. wpa=3                               # 指定 WPA 类型  
    7. wpa_key_mgmt=WPA-PSK              
    8. wpa_pairwise=TKIP  
    9. rsn_pairwise=CCMP  
    10. wpa_passphrase=ap_password          # 连接 ap 的密码  
    11. driver=nl80211                      # 设定无线驱动  
    12. interface=wlan0                     # 接入点设备名称  
    13. hw_mode=g                           # 指定802.11协议,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g  
    14. channel=9                           # 指定无线频道  
    15. ssid=ap_name                        # 连接 ap 的名字  
    macaddr_acl=0					   # 可选,指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部RADIUS服务器;
    # accept_mac_file:指定允许MAC列表文件所在;
    # deny_mac_file:指定禁止MAC列表文件所在;
    auth_algs=1							# 采用 OSA 认证算法
    ignore_broadcast_ssid=0
    wpa=3								# 指定 WPA 类型
    wpa_key_mgmt=WPA-PSK			
    wpa_pairwise=TKIP
    rsn_pairwise=CCMP
    wpa_passphrase=ap_password			# 连接 ap 的密码
    driver=nl80211						# 设定无线驱动
    interface=wlan0						# 接入点设备名称
    hw_mode=g							# 指定802.11协议,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g
    channel=9							# 指定无线频道
    ssid=ap_name						# 连接 ap 的名字
    运行 hostapd
    1. hostapd /etc/hostapd/hostapd.conf  
    hostapd /etc/hostapd/hostapd.conf
    注意:此处可能会报错
    Could not set interface wlan0 flags (UP): Operation not possible due to RF-kill
    wlan0: Could not connect to kernel driver
    Failed to set beacon parameters
    wlan0: Could not connect to kernel driver
    解决方法是执行下面的命令
    1. rfkill unblock wifi  
    rfkill unblock wifi
    运行 hostapd 后可以用手机看到 wifi 的 ap 了。


  • 开启 ip 自动分配
    安装 dhch server
    1. apt-get install isc-dhcp-server  
    apt-get install isc-dhcp-server
    修改配置 (/etc/dhcp/dhcpd.conf) 为
    1. option domain-name-servers 211.161.45.222,10.141.146.10;        # dns 服务器  
    2. default-lease-time 3600;                                        # 最小租约 3600 秒  
    3. max-lease-time 7200;                                            # 最大租约 7200 秒  
    4. log-facility local7;                                              
    5. subnet 192.168.1.0 netmask 255.255.255.0 {                        
    6.     range  192.168.1.77 192.168.1.99;                           # ip 起始地址  
    7.     option broadcast-address 192.168.1.255;                     # 广播地址  
    8.     option routers 192.168.1.1;                                 # 网关 要写成这台机器的 wlan0 的ip  
    9. }  
    option domain-name-servers 211.161.45.222,10.141.146.10;		# dns 服务器
    default-lease-time 3600;										# 最小租约 3600 秒
    max-lease-time 7200;											# 最大租约 7200 秒
    log-facility local7;											
    subnet 192.168.1.0 netmask 255.255.255.0 {						
    	range  192.168.1.77 192.168.1.99;							# ip 起始地址
    	option broadcast-address 192.168.1.255;						# 广播地址
    	option routers 192.168.1.1;									# 网关 要写成这台机器的 wlan0 的ip
    }
    给 wlan0 添加 ip
    1. ifconfig wlan0 192.168.1.1  
    ifconfig wlan0 192.168.1.1
    启动 dhcp server
    1. dhcpd  
    dhcpd
    此时可以用手机连接到 ap,并得到分配到的 ip 地址。(要设置转发之后才能上外网)


  • 配置 SNAT
    打开 内核的 ip 转发功能
    1. echo "1" > /proc/sys/net/ipv4/ip_forward  
    echo "1" > /proc/sys/net/ipv4/ip_forward
    1. vim /etc/sysctl.conf  
    2. #添加或修改这样一段:  
    3. net.ipv4.conf.default.rp_filter = 1  
    4. #然后执行命令  
    5. sysctl -p  
    vim /etc/sysctl.conf
    #添加或修改这样一段:
    net.ipv4.conf.default.rp_filter = 1
    #然后执行命令
    sysctl -p
    使用 iptables 设置转发
    1. iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE      
    2. iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT  
    3. iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT  
    iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE	
    iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
    iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
    其中第一条表示将通过本机的转发数据包从eth0(外网)这个网卡发出去,另外两条表示只转发192.168.1.0/24这个网段过来的数据包,这个网段正好是wlan0其它设备连上本机以后分配的网段。


  • 手机连接 ap 可以上网了


posted @ 2017-09-10 17:33  大海中的一粒沙  阅读(1917)  评论(0编辑  收藏  举报