本文将描述如何使用无线网卡自建无线热点,并让连接到这个热点上的客户端都通过自定义的代理访问网络。本文侧重路由设置。
创建这样一个无线接入点的主要步骤如下:
- 创建无线接入点。让客户端可以接入自建的无线网络
- 创建虚拟局域网。无线接入点上的客户端将通过此虚拟局域网访问互联网
- 设置路由。让无线接入点客户端的网络请求转发到虚拟局域网上
0. 网络结构
使用无线网卡自建无线网络是需要一台电脑的,这台电脑连接着有线网络,并且需要在上面建立 VPN 连接。
地址 | 网关 | |
---|---|---|
有线网络 | 192.168.0.11 | 192.168.0.1 |
VPN 网络 | 10.8.30.11 | 10.8.30.1 |
无线网络 | DHCP 分配,192.168.2.100-200 | 192.168.2.1 |
1. 创建无线接入点
1.1 创建无线网络
使用 hostapd 可以很轻松地创建无线网络。在这份文档中,创建一个名为 GLADDER 的无线网络,使用 WPA2 加密。
1.2 设置无线网络的网关
hostapd 启动无线网络后,虽然搜索无线网络的时候已经能看到 GLADDER 这个无线网络了,但此时无线网卡是没有 IP 地址(也就是无线网络的网关)的,需要手动给无线网卡设置一个 IP 地址作为无线网络的网关。
假设无线网卡的名字是 wlan0,执行下面的命令
- ifconfig wlan0 192.168.2.1 netmask 255.255.255.0
1.3 设置 DHCP 服务
使用 isc-dhcp-server 给无线网络提供 DHCP 服务。安装 isc-dhcp-server 后,修改其配置文件,添加如下内容:
- subnet 192.168.2.0 netmask 255.255.255.0 {
- range 192.168.2.100 192.168.2.200;
- option routers 192.168.2.1;
- }
之后重新启动 isc-dhcp-server
- /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 的配置文件中增加如下配置:
- up /your/path/openvpn-up.sh
这样 OpenVPN 在连接成功后,tun 设备初始化完毕之后,就会执行 openvpn-up.sh 脚本。我们需要通过这个脚本去设置路由。该脚本的内容在下文给出。
这样做的好处是,在 OpenVPN 断线重连后,可以自动重新设定路由信息,不需要人工进行干预。
3. 设置路由信息
3.1 创建路由表
编辑 /etc/iproute2/rt_tables 文件,在文件末尾添加如下内容:
- 200 gladder
这样我们就创建了一个名为 gladder 的路由表
3.2 启用 IP 转发
修改 /etc/sysctl.conf 文件,将 net.ipv4.ip_forward 设置的值改为 1,然后执行:
- sysctl -p
这样就可以开启 IP 转发功能了
3.3 设置 IP 转发及路由信息
新建 openvpn-up.sh 文件,输入以下内容:
- #!/bin/bash
- tun=$1
- echo 设置 iptables
- iptables -t nat -A POSTROUTING -o $tun -s 192.168.2.0/24 -j MASQUERADE
- echo 清空 gladder 表中的路由信息
- ip route flush table gladder
- echo 设置 gladder 表的路由信息
- ip route add 10.8.30.0 dev $tun src 192.168.30.11 table gladder
- ip route add default via 10.8.30.1 dev $tun table gladder
- echo 设置主路由表到 192.168.2.0/24 子网的路由
- route add -net 192.168.2.0/24 gw 192.168.2.1
- exit 0
该脚本的作用是:
1. 首先在 tun0 上为来自无线网络的数据包设置 MASQUERADE
2. 接着在 gladder 路由表上设置路由信息,让所有的数据包都从 10.8.30.0 这个 OpenVPN 的网络走出去
3. 最后设定让来自 192.168.2.0/24 的数据包使用 gladder 这个路由表进行路由,如下:
- 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/