Debian/Ubuntu下WiFi AP转OpenVPN+stunnel透明网关配置问询
Alright, let's break this down for you since you already have a solid foundation with your Raspberry Pi setup (stunnel4 + OpenVPN, hostapd working). Let's start with your core question first:
关于DHCP的选择:必须用dnsmasq(或本地DHCP服务),OpenVPN内置DHCP不适用
OpenVPN的内置DHCP功能是专门给连接到VPN隧道的客户端分配IP的(比如如果其他设备直接连你的OpenVPN服务器),但你的场景里,手机是连接到树莓派的WiFi局域网(wlan0接口),属于本地LAN设备,和VPN隧道是两个完全独立的网络段。所以你必须用dnsmasq这类本地DHCP服务器给WiFi接入设备分配IP、网关和DNS信息。
具体配置步骤
1. 安装并配置dnsmasq
首先安装dnsmasq:
sudo apt update && sudo apt install dnsmasq
备份默认配置文件,然后新建自定义配置:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.backup sudo nano /etc/dnsmasq.conf
添加以下配置(根据你的实际接口调整,假设无线接口是wlan0,树莓派的wlan0静态IP设为192.168.50.1/24):
# 仅监听无线接口,避免干扰其他网络 interface=wlan0 # 禁用DNS转发到系统默认DNS(可选,防止DNS泄漏) no-resolv # 分配的IP段和租期(可根据需求调整范围) dhcp-range=192.168.50.10,192.168.50.50,255.255.255.0,24h # 网关设为树莓派的wlan0 IP,让WiFi设备把树莓派当作默认网关 dhcp-option=3,192.168.50.1 # DNS服务器可以设为VPN推送的DNS(更安全,避免泄漏)或可靠公网DNS,比如1.1.1.1 dhcp-option=6,1.1.1.1
保存后重启dnsmasq:
sudo systemctl restart dnsmasq
2. 开启内核IP转发
让树莓派具备路由转发能力,修改sysctl配置:
sudo nano /etc/sysctl.conf
取消注释以下行:
net.ipv4.ip_forward=1
立即生效配置:
sudo sysctl -p
3. 配置iptables流量转发规则
把WiFi接口(wlan0)的所有流量转发到VPN隧道接口(通常是tun0),并设置MASQUERADE让返回流量能正确回到WiFi设备:
# 允许转发wlan0到tun0的所有流量 sudo iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT # 允许VPN接口返回的关联/已建立流量回到wlan0 sudo iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT # 配置地址伪装,让WiFi设备的流量通过VPN接口出去时使用树莓派的VPN IP sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
为了让规则在树莓派重启后不丢失,安装netfilter-persistent保存规则:
sudo apt install netfilter-persistent sudo netfilter-persistent save
4. 验证OpenVPN配置(可选但重要)
确保你的OpenVPN客户端配置(树莓派上的)没有限制流量转发,比如检查/etc/openvpn/*.conf,确保没有pull-filter ignore route这类阻止路由推送的配置——这样树莓派本身的流量会走VPN,同时能正常转发WiFi设备的流量。
测试验证
- 连接手机到树莓派的WiFi
- 在手机上查询公网IP,应该显示你的VPN服务器的公网IP,而非本地ISP的IP
- 测试访问网站,确认流量正常通过VPN路由
内容的提问来源于stack exchange,提问作者Mr. Developerdude

