释放小七猫的分享欲

OpenWRT 中 OpenVPN 多个客户端进行二层传输的配置方法

tags: 软路由, OpenWRT
@ 30/10/2025

OpenWRT 中 OpenVPN 多个客户端进行二层传输的配置方法

本文转载自

openwrt中openvpn配置方法

1、说明

1.1 已安装好openvpn

openwrt中已安装好openvpn,没安装好的,网上查安装方法;

1.2 配置的目的

利用openvpn协议,通过vpn服务器作为数据转发通道,将多个vpn客户端通过vpn隧道进行二层连接,相当于网线直连;可以这么理解:当配置好服务端和客户端后,就相当于一个不受物理位置影响的具大的交换机,服务端相当于交换机的主控,用于控制转发数据,每个客户端的vpn隧道出口(一般是tap设备绑定的LAN口)相当于交换机的一个端口,每个客户端之前的通信就相当于交换机中各个端口之间的通信(二层通信)。

2、openvpn证书配置

2.1 配置 easy-rsa

1)找一台linux服务器进行如下操作指令:

wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.7.zip
unzip easy-rsa-3.0.7.zip
cd easy-rsa-3.0.7/easyrsa3
cp -a vars.example vars

2)修改vars文件,根据需要去掉注释,并修改对应值;或者直接在文件末尾追加如下信息:

set_var EASYRSA_REQ_COUNTRY "CN" # 国家
set_var EASYRSA_REQ_PROVINCE "BJ" # 省
set_var EASYRSA_REQ_CITY "BeiJing" # 城市
set_var EASYRSA_REQ_ORG "Ystar" # 组织
set_var EASYRSA_REQ_EMAIL "[email protected]" # 邮箱
set_var EASYRSA_REQ_OU "Ken" # 拥有者
set_var EASYRSA_KEY_SIZE 2048 # 长度
set_var EASYRSA_ALGO rsa # 算法
set_var EASYRSA_CA_EXPIRE 36500 # CA证书过期时间,单位天
set_var EASYRSA_CERT_EXPIRE 36500 # 签发证书的有效期是多少天,单位天

2.2 生成服务端和客户端证书

1)初始化与创建CA根证书

./easyrsa init-pki

初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书

./easyrsa build-ca

在这部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,如:openvpen,这个你自己随便设置个独一无二的。

2)生成服务端证书

./easyrsa build-server-full server nopass

为服务端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中会让你确认ca密码;

./easyrsa gen-dh

创建Diffie-Hellman,确保key穿越不安全网络的命令,时间会有点长,耐心等待;

3)生成客户端证书

生成多个客户端证书:

# 无密码,实际应用中不推荐,客户端有密码可提高安全性
./easyrsa build-client-full client nopass

# 让你输入密码,后续VPN连接时会使用
./easyrsa build-client-full ken

为客户端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中都会让你确认ca密码;

为了提高安全性,生成ta.key(也可以不配):

openvpn --genkey --secret ta.key

加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的),就需要执行上述命令,并把ta.key放到/etc/openvpn/server目录。配置文件中服务端第二个参数为0,同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。【服务端有该配置,那么客户端也必须要有】;

4)整理证书

服务端证书:

  • ca.crt:在 pki目录下
  • server.key:在pki/private 目录下
  • server.crt:在pki/issued 目录下
  • dh.pem:在pki目录下
  • ta.key:在easyrsa3目录下(可以不使用这个证书)

客户端证书:

  • ca.crt:在 pki目录下(和服务端的一样)
  • client.key:在pki/private 目录下
  • client.crt:在pki/issued 目录下

3、openvpn服务端

3.1 界面配置vpn

1)进入VPN->OpenVPN中,找到Template based configuration(配置模板)选择:Server configuration for an ethernet bridge VPN 这个模块,输入名字,添加:

2)点击编辑,进入配置:

3)按如下配置信息进行配置,其中模块自带的"不需要"的选项自行通过"–remove –“或者清空内容或者去掉勾进行移除(注:要保存并应用才生效),如果模块不存在的选项,通过"更多选项"进行"添加”;

  1. TLS 证书的上传:

3.2 启动服务器

确认是否启动成功:

1)通过ssh连接到openwrt系统中,使用指令:

cat /tmp/log/openvpn.log

2)如果启动失败,通过log上打提示进行解决问题;

有可能如下原因:

  • ①与服务端的网络不通
  • ②服务器的端口号不对
  • ③证书不正确

3.3 配置tap二层转发虚拟设备

openvpn中的二层转发数据都是通过tap这个虚拟的网络设备进行二层转发的,所以在实际使用中,如果openwrt系统中的lan口的数据需要通过openvpn隧道进行二层数据的转发,一定要将lan口绑定tap,才可以进行转发:

1)在"网络"->“接口”->“设备"中将br-lan 这个网桥设备绑定tap设备tapx(x是数字,根据实际情况配置),作为服务器可以不绑lan口;

3.4 关于公网IP要求

如果vpn需要在公网上使用,那么vpn的服务器需要拥有公网IP,确保能让在内网的vpn客户端能正常访问;当然,也可以使用域名方式进行访问;

4、openvpn客户端

4.1 界面配置vpn

1)进入VPN->OpenVPN中,找到Template based configuration(配置模板)选择:Server configuration for an ethernet bridge VPN 这个模块,输入名字,添加:

2)点击编辑,进入配置:

3)按如下配置信息进行配置,其中模块自带的"不需要"的选项自行通过”–remove –“或者清空内容或者去掉勾进行移除(注:要保存并应用才生效),如果模块不存在的选项,通过"更多选项"进行"添加”;

4)TLS证书的上传:

在"上传文件"界面可以按实际情况进行如下操作:

  • ①如果正确的证书在系统里在,直接在对应的目录里选择即可;
  • ②如果需要上传新的证书,先打开目标目录,然后选择本地电脑上的证书进行上传即可,原来不用的证书可以保留也可以删除,要注意区分开就行;

4.2 启动服务器

确认是否启动成功:

1)通过ssh连接到openwrt系统中,使用指令:

cat /tmp/openvpn.log

2)如果启动失败,通过log上打提示进行解决问题;

有可能如下原因:

  • ①与服务端的网络不通
  • ②服务器的端口号不对
  • ③证书不正确

4.3 配置tap二层转发虚拟设备

openvpn中的二层转发数据都是通过tap这个虚拟的网络设备进行二层转发的,所以在实际使用中,如果openwrt系统中的lan口的数据需要通过openvpn隧道进行二层数据的转发,一定要将lan口绑定tap,才可以进行转发:

2)在"网络"->“接口”->“设备"中将br-lan 这个网桥设备绑定tap设备tapx(x是数字,根据实际情况配置),作为客户端,还需要绑定一个物理的lan口作为openvpn隧道的出入口,这个绑定的lan口用于传入需要通过vpn隧道进行传输的数据;

5、关于vlan配置

openwrt中,可以对绑在br-lan中的各个接口进行配置vlan,操作路径:网络->接口->设备->br-lan->配置:

配置说明:

  • VLAN ID:根据实际情况配置vlan
  • 本地:默认一定选上,让所有的vlan都可以在本地接口之前转发
  • 非成员:如果选择非成员,意味着这个接口不属于这个VLAN的,那么VLAN ID将不起作用,接口不会处理带这个VLAN数据的流量;
  • 未打标签:即Utag,和交换机的vlan配置一样;
  • 已打标签:即tag,和交换机的vlan配置一样;
  • 是主VLAN:即pvid,和交换机的vlan配置一致;