树莓派作为 openvpn client 配置旁路由
本文永久链接: https://www.xtplayer.cn/raspberry-pi-is-configured-as-an-openvpn-client-to-set-up-an-external-route/
将树莓派配置为旁路由并连接 OpenVPN,可以让家里所有设备(电视、游戏机等不支持安装VPN的终端)都通过树莓派走 VPN 流量。核心思路是:树莓派作为 VPN 客户端连接服务器,同时开启 IP 转发和 NAT 伪装,将自身变成一个 VPN 网关”。
安装 OpenVPN 并准备配置文件
首先在树莓派上安装OpenVPN:
sudo apt update && sudo apt upgrade -y |
你需要从VPN服务商或公司网络管理员处获取配置文件(通常是.ovpn文件)以及证书文件。为了管理方便,可以把所有内容合并到一个文件中。
将你的VPN配置文件(比如叫client.conf)放到/etc/openvpn/client/目录下。文件通常包含以下关键内容:
client |
连接测试与开机自启
sudo openvpn --config /etc/openvpn/client/client.conf |
如果看到 Initialization Sequence Completed,说明连接成功。按 Ctrl+C 停止。
启用服务(将client替换为你的配置文件名,不含.conf扩展名):
sudo systemctl enable --now openvpn-client@client |
开启 IP 转发(关键步骤)
要让局域网其他设备通过树莓派上网,必须开启IP转发功能。执行以下命令:
# 临时开启 |
然后让配置生效:
# 新版本的生效方式 |
验证:执行 sysctl net.ipv4.ip_forward,如果返回 net.ipv4.ip_forward = 1 就说明配置成功了
配置 iptables NAT 规则
这是整个配置最核心的一步。通过 iptables 实现 NAT(网络地址转换),让局域网设备通过树莓派的VPN隧道上网。
# 假设tun0是VPN虚拟网卡,eth0是你的内网网卡(也可能是wlan0) |
为了让重启后规则不丢失,需要保存:
# 如果没有这个目录,先创建 |
然后创建开机自动恢复规则的服务或脚本。更简单的方法是用 iptables-persistent:
sudo apt install iptables-persistent -y |
配置 iptables NAT 规则
在 Debian Trixie 上,系统已经默认从 iptables 迁移到了 nftables。虽然 iptables 命令还可以用(通过兼容层),但原生使用 nftables 会更高效、更符合新系统的设计方向。
创建或者更新 /etc/nftables.conf 规则文件
/etc/nftables.conf 文件可能存在,如果存在则先进行备份。如果不存在,则执行 vi /etc/nftables.conf 新建。以下为修改之后的配置示例(根据你的网卡名称调整 eth0 和 tun0)。
|
说明:
- 如果你的树莓派通过 WiFi 连接主路由,把
eth0换成wlan0 - VPN 虚拟网卡的名字通常是
tun0,可以通过ip a确认
测试规则是否加载成功
# 先加载并测试 |
务必保留 SSH 端口(上面已经加了 tcp dport 22 accept),否则重启后可能失联。
设置开机自动加载
在 Debian Trixie 上,可以直接启用 nftables 服务:
sudo systemctl enable nftables --now |
配置静态路由
因为树莓派是作为旁路由,下游 PC 默认网关为主路由器。当下游 PC 需要访问 openvpn 下的某个网段时,通常需要在 PC 上添加一条静态路由。
互联网 |
Windows
# 以管理员身份运行 |
Linux
| 操作系统 / 环境 | 配置方法 / 后端 | 核心要点 |
|---|---|---|
| RHEL/CentOS 7 及更早版本 | network 服务 + route-<接口> 文件 |
创建 /etc/sysconfig/network-scripts/route-eth0 内容格式:192.168.100.0/24 via 192.168.1.1 然后重启网络:systemctl restart network |
| RHEL/CentOS 8+ / Fedora | NetworkManager | 推荐使用 nmcli 命令行: nmcli connection modify <连接名> +ipv4.routes "192.168.100.0/24 192.168.1.1" 然后重新加载:nmcli connection reload |
| Debian/Ubuntu (传统) | ifupdown 服务 |
编辑 /etc/network/interfaces 在网卡配置块内添加 up ip route add 192.168.100.0/24 via 192.168.1.1 |
| Ubuntu 18.04+ 及现代 Debian | Netplan | 编辑 /etc/netplan/\*.yaml 在对应网卡下添加 routes: 条目,注意 YAML 语法缩进 然后应用:netplan apply |
| 使用 systemd 的发行版 (如 Arch, CoreOS) | systemd-networkd | 编辑 /etc/systemd/network/10-<接口>.network 在 [Route] 部分指定 Gateway= 和 Destination= 然后重启服务:systemctl restart systemd-networkd |
macOS
查询接口名称
networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Wi-Fi
Thunderbolt Bridge
USB 10/100/1000 LAN
USB 10/100 LAN 2
USB 10/100 LAN
HERO12 Black
iPhone USB
Karing (system)
SUSE-VPN根据接口名称创建静态路由,以 WIFI 为例:
目标网络:
10.201.136.0子网掩码:
255.255.255.0(即10.201.136.0/24网段)网关(下一跳):
192.168.31.31
sudo networksetup -setadditionalroutes "Wi-Fi" 10.201.136.0 255.255.255.0 192.168.31.31

