Total Pageviews

Saturday 29 October 2016

搭建走代理的无线热点

本文将描述如何使用无线网卡自建无线热点,并让连接到这个热点上的客户端都通过自定义的代理访问网络。本文侧重路由设置。
创建这样一个无线接入点的主要步骤如下:
  1. 创建无线接入点。让客户端可以接入自建的无线网络
  2. 创建虚拟局域网。无线接入点上的客户端将通过此虚拟局域网访问互联网
  3. 设置路由。让无线接入点客户端的网络请求转发到虚拟局域网上

0. 网络结构

使用无线网卡自建无线网络是需要一台电脑的,这台电脑连接着有线网络,并且需要在上面建立 VPN 连接。
地址网关
有线网络192.168.0.11192.168.0.1
VPN 网络10.8.30.1110.8.30.1
无线网络DHCP 分配,192.168.2.100-200192.168.2.1

1. 创建无线接入点

1.1 创建无线网络

使用 hostapd 可以很轻松地创建无线网络。在这份文档中,创建一个名为 GLADDER 的无线网络,使用 WPA2 加密。

1.2 设置无线网络的网关

hostapd 启动无线网络后,虽然搜索无线网络的时候已经能看到 GLADDER 这个无线网络了,但此时无线网卡是没有 IP 地址(也就是无线网络的网关)的,需要手动给无线网卡设置一个 IP 地址作为无线网络的网关。
假设无线网卡的名字是 wlan0,执行下面的命令
  1. ifconfig wlan0 192.168.2.1 netmask 255.255.255.0  

1.3 设置 DHCP 服务

使用 isc-dhcp-server 给无线网络提供 DHCP 服务。安装 isc-dhcp-server 后,修改其配置文件,添加如下内容:
  1. subnet 192.168.2.0 netmask 255.255.255.0 {  
  2.     range 192.168.2.100 192.168.2.200;  
  3.     option routers 192.168.2.1;  
  4. }  
之后重新启动 isc-dhcp-server
  1. /etc/init.d/isc-dhcp-server restart  
isc-dhcp-server 启动之后会遍历所有网卡,如果网卡的 IP 地址属于 192.168.2.0/24 这个网段内,就在这个网卡上提供 DHCP 服务。
上面一段的配置文件的意思是,在 192.168.2.0/24 这个网络上提供 DHCP 服务,地址池为 192.168.2.100-200,网关为 192.168.2.1

2. 创建虚拟局域网

本文档使用 OpenVPN 创建虚拟局域网作。
OpenVPN 的配置很简单,如果遇到干扰,可以使用 OpenVPN 的 static key 模式,并使用非标准端口,这样就可以避免遭到干扰。另外请使用 UDP 模式,如果使用 TCP 模式,在某些情况下网速可能会急剧下降,有关详情请搜索”TCP over TCP problem”。
在 OpenVPN 的配置文件中增加如下配置:
  1. up /your/path/openvpn-up.sh  
这样 OpenVPN 在连接成功后,tun 设备初始化完毕之后,就会执行 openvpn-up.sh 脚本。我们需要通过这个脚本去设置路由。该脚本的内容在下文给出。
这样做的好处是,在 OpenVPN 断线重连后,可以自动重新设定路由信息,不需要人工进行干预。

3. 设置路由信息 

3.1 创建路由表

编辑 /etc/iproute2/rt_tables 文件,在文件末尾添加如下内容:
  1. 200  gladder  
这样我们就创建了一个名为 gladder 的路由表

3.2 启用 IP 转发

修改 /etc/sysctl.conf 文件,将 net.ipv4.ip_forward 设置的值改为 1,然后执行:
  1. sysctl -p  
这样就可以开启 IP 转发功能了

3.3 设置 IP 转发及路由信息

新建 openvpn-up.sh 文件,输入以下内容:
  1. #!/bin/bash  
  2.   
  3. tun=$1  
  4.   
  5. echo 设置 iptables  
  6. iptables -t nat -A POSTROUTING -o $tun -s 192.168.2.0/24 -j MASQUERADE  
  7.   
  8. echo 清空 gladder 表中的路由信息  
  9.   
  10. ip route flush table gladder  
  11.   
  12. echo 设置 gladder 表的路由信息  
  13. ip route add 10.8.30.0 dev $tun src 192.168.30.11 table gladder  
  14. ip route add default via 10.8.30.1 dev $tun table gladder  
  15.   
  16. echo 设置主路由表到 192.168.2.0/24 子网的路由  
  17. route add -net 192.168.2.0/24 gw 192.168.2.1  
  18.   
  19. exit 0  
该脚本的作用是:
1. 首先在 tun0 上为来自无线网络的数据包设置 MASQUERADE
2. 接着在 gladder 路由表上设置路由信息,让所有的数据包都从 10.8.30.0 这个 OpenVPN 的网络走出去
3. 最后设定让来自 192.168.2.0/24 的数据包使用 gladder 这个路由表进行路由,如下:
  1. ip rule add from 192.168.2.0/24 table gladder  

如果一切正常的话,现在就可以连接 GLADDER 热点通过 OpenVPN 连接来访问互联网了.
from https://www.gsea.com.cn/blog/topic/wireless-lan-via-openvpn-howto/