OpenWRT/LEDE路由器搭建OpenVPN服务器
硬件:NETGEAR WNDR3800 v1
系统:LEDE 17.01.3
关于OpenWRT和LEDE的关系,此处不多啰嗦,可自行Google之。至于路由器如何刷LEDE,网上有大把优秀的教程,此处也不赘述。
一、安装搭建openvpn所需要的软件
首先,ssh登录路由器并更新软件源:
1 2 3 4 5 | # 登录路由器 ssh root@192.168.1.1 # 更新软件源 opkg update |
更新完成后安装需要的软件:
1 | opkg install openvpn-easy-rsa openvpn-mbedtls |
二、使用easy-rsa生成需要的证书文件
首先编辑 /etc/easy-rsa/vars
文件设置相关变量
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | # key的长度 export KEY_SIZE=2048 # ca证书多少天后过期 export CA_EXPIRE=3650 # key多少天后过期 export KEY_EXPIRE=3650 # 所在国家2位代码 export KEY_COUNTRY= "CN" # 所在省份代码 export KEY_PROVINCE= "YN" # 所在城市代码 export KEY_CITY= "KunMing" # 所在公司或组织代码 export KEY_ORG= "MYORG" # 联系邮箱 export KEY_EMAIL= "wanglu@example.com" # 所在单位组织的某个小部门的意思吧 export KEY_OU= "MyOrgUnit" # key的名称,随意 export KEY_NAME= "EasyRSA" |
现在可以开始生成证书了,生成过程中会在交互界面要你输入一些参数,由于之前在vars中设置过了,这里全部按回车就行
1 | build-ca |
此命令生成的ca.crt
和ca.key
会保存在/etc/easy-rsa/keys
目录下
然后生成一个Diffie-Hellman交换密钥
1 | build-dh |
此命令时间很长,需要耐心等待。
生成服务器端证书和密钥
1 2 | # 此处的 server 为服务端证书,可根据需要自行设置 build-key-server server |
运行该命令后会提示输入一些参数,此处我全部留空,但要注意,提示输入[y/n]时输入y,这样就完成服务器端证书生成了。
生成客户端证书
1 2 3 4 | # 此处的 uvs-001 为客户端证书,可根据需要自行设置 build-key-pkcs12 uvs-001 # 第一个客户端 build-key-pkcs12 uvs-002 # 第二个客户端 build-key-pkcs12 uvs-003 # 第三个客户端 |
该命令和生成服务端证书步骤一样。
最后将ca.crt
、server.crt
、server.key
、dh2048.pem
拷贝到/etc/openvpn
目录下。
三、配置OpenVPN服务器
修改 /etc/config/openvpn
配置文件中 sample_server
区域
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ################################################# # Sample OpenVPN 2.0 uci config for # # multi-client server. # ################################################# config openvpn sample_server # 开启openvpn服务器 option enabled 1 # 使用的端口,记住防火墙要打开1194端口 option port 1194 # 使用的协议,保持默认 option proto udp # "dev tun" will create a routed IP tunnel, option dev tun # 生成的证书相关的配置 option ca /etc/openvpn/ca .crt option cert /etc/openvpn/server .crt option key /etc/openvpn/server .key option dh /etc/openvpn/dh2048 .pem # 配置使用的IP地址 # 下面的设置,些服务器会自动使用10.10.10.1做为自己的IP地址 option server "10.10.10.0 255.255.255.0" # 此处设置连接的客户端记录文件 option ifconfig_pool_persist /tmp/ipp .txt # 网络拓扑,为了让所有客户端在同一子网内,打开此选项 option topology subnet # 如果要另外设置客户端的IP地址,请打开此选项 option client_config_dir /etc/openvpn/ccd list route "10.10.10.0 255.255.255.0" # 让客户端之间可以相互通讯 option client_to_client 1 # 第10秒会进行ping测试,如果120秒没有回应会断线 option keepalive "10 120" option compress lzo option max_clients 15 # The persist options will try to avoid # accessing certain resources on restart # that may no longer be accessible because # of the privilege downgrade. option persist_key 1 option persist_tun 1 option user nobody # Output a short status file showing # current connections, truncated # and rewritten every minute. option status /tmp/openvpn-status .log # 设置日志等级 option verb 3 |
因为我在配置文件中配置了client-config-dir ccd,所以我要继续设置客户端IP(没有打开的可以不用设置,DHCP服务器会自动分配)
首先在/etc/openvpn下建立ccd目录
1 | mkdir /etc/openvpn/ccd |
这里我将之前生成的uvs-001的客户端IP设置为如下10.10.10.101,子网掩码为255.255.255.0
1 | vi /etc/openvpn/ccd/uvs-001 |
配置文件如下:
1 | ifconfig -push 10.10.10.101 255.255.255.0 |
最后让OpenVPN服务器开机启动:
1 | /etc/init .d /openvpn enable |
四、防火墙配置
首先在 /etc/config/firewall 文件最后添加如下规则:
1 2 3 4 5 6 | config rule option target 'ACCEPT' option name 'Allow-OpenVPN-Wan-Inbound' option src 'wan' option proto 'udp' option dest_port '1194' |
然后在 /etc/firewall.user 文件最后添加如下规则:
1 2 3 4 5 6 7 | iptables -t nat -A prerouting_wan_rule -p udp --dport 1194 -j ACCEPT iptables -A input_wan_rule -p udp --dport 1194 -j ACCEPT iptables -I INPUT -i tun+ -j ACCEPT iptables -I FORWARD -i tun+ -j ACCEPT iptables -I OUTPUT -o tun+ -j ACCEPT iptables -I FORWARD -o tun+ -j ACCEPT |
此时,防火墙规则配置完成,重启路由器后规则即可生效。
五、客户端连接测试
客户端连接使用可以参考《OpenVPN客户端配置》
另外,由于我们常用的路由器使用PPPoE拨号上网,没有固定IP,我们可以在路由器上做动态域名解析,然后将《OpenVPN客户端配置》中openvpn服务器的外网IP改为动态域名。
当然,如果是路由器内网中的机器连接,则openvpn服务器的外网IP可直接使用 192.168.1.1
六、声明
个人觉得,dnspod的动态域名解析速度最快,即使免费用户也基本可以达到即时生效,关于 OpenWRT/LEDE 中如何使用dnspod的动态域名解析,下篇文章会单独说明。
说明:此方案是博主为某小型商贸公司搭建的办公网络,公司办公地点分布在4个不同的地点,并要求只有指定人员的电脑可以连接公司的数据服务器,这样就可以为每个有权限的员工电脑分配一个vpn客户端证书,然后在数据服务器防火墙上设置规则,只接受来自vpn网络的流量。日常使用vpn的客户端(员工)有12个,目前已经稳定运行一年多,除去电信本身的网络故障和停电的状况外,还没有一起因本方案不稳定引起的故障!
按照惯例,如有雷同,我抄你的 !
除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址
首先编辑 /etc/easy-rsa/vars 文件设置相关变量
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
# key的长度
export KEY_SIZE=2048
# ca证书多少天后过期
export CA_EXPIRE=3650
# key多少天后过期
export KEY_EXPIRE=3650
# 所在国家2位代码
export KEY_COUNTRY="CN"
# 所在省份代码
export KEY_PROVINCE="YN"
# 所在城市代码
export KEY_CITY="KunMing"
# 所在公司或组织代码
export KEY_ORG="MYORG"
# 联系邮箱
export KEY_EMAIL="wanglu@example.com"
# 所在单位组织的某个小部门的意思吧
export KEY_OU="MyOrgUnit"
# key的名称,随意
export KEY_NAME="EasyRSA"
大哥,这段编辑,是如何编辑的,我发现没入口进入啊,是直接双击打开vars文件修改么,还是会有什么具体的进入命令修改啊,请教下,拜托了,就卡这里了 求教 谢谢啊
我是直接使用 vim 编辑器进行编辑,这就是一个普通的文本文件,用任何你喜欢的文本编辑器进行编辑都是可以的。
Hi 博主,我的sever只支持1对1链接,再添加第二个客户端第一个就自动断连了,请问下这个是什么问题。。同时方便留下您的邮箱吗,我的是.lancer1995@outlook.com
目前还没有遇到过这样的情况,有没有可能是第一个客户端和第二个配置了同样的ip导致冲突?
如上配置后,我想生成ovpn文件,以便在MacOs和Windows的客户端上使用,但是上文提及的《OpenVPN客户端配置》已无法打开,求分享方法,谢谢
抱歉,博客的固定链接做过更改,原文章链接失效了,直接在博客里面搜索关键字就能找到。
2.30的lede一直无法搞定openvpn sever,能再出个教程吗?
楼主好!我也是wndr3800+openwrt18.06+openvpn;我有个问题想请教一下楼主就是oepnvpn如何给客户端固定IP。
非常感谢楼主,已经通过楼主的贴子终于搞定分配固定IP
不客气,文章有用才是它存在的意义。
最近一段时间在外面忙着没有登录后台,今天才看到评论。
你这几篇文章的艺术成份很高
为什么是艺术成份?尴尬了。。。
弄好之后一直都是能连接上,但是访问不了服务端其他主机,不知道为什么
你说的是连接到vpn网络的主机之间相互通讯吗?如果是的话检查下
option topology subnet
和option client_to_client 1
有没有配置。我做的配置是可以相互访问的,用于内部办公网络。不是,我只有一个客户端,我要访问远程的其他主机,我的open***装在OpenWrt上的,家里的路由器。我之前弄好之后用了一年多,上个星期突然用不了了,这两天怎么弄都不行,都怀疑是电信给封了,但是我的端口用的是4XXXX,不知道电信怎么封得了
如果电信封锁了open***的服务端口的话客户端应该无法连接上的。电信封端口的话就得自己尝试出一个未封锁的端口了,这种情况我也遇到过,而且不同区域封锁的端口还不同。
OpenWrt 18.06 提示 "-ash: build-ca: not found"
openvpn-easy-rsa
这个包有没有成功安装,或者18.06是还是被其它包替代了?18.06建立证书的命令变了
# Configuration parameters
export EASYRSA_PKI="/etc/easy-rsa/pki"
export EASYRSA_REQ_CN="vpnca"
# Remove and re-initialize the PKI directory
easyrsa --batch init-pki
# Generate DH parameters
# May take a while to complete (~25m on WRT3200ACM)
easyrsa --batch gen-dh
# Create a new CA
easyrsa --batch build-ca nopass
# Generate a keypair and sign locally for vpnserver
easyrsa --batch build-server-full vpnserver nopass
# Generate a keypair and sign locally for vpnclient
easyrsa --batch build-client-full vpnclient nopass
LEDE能搭建L2TP么?
可以的,搭建应该比OpenVPN更简单!
楼主 ,按照你的操作根本无法启动,你确定没忽悠我
不应该啊,我第一次用的路由系统是OpenWRT,这个教程用的是LEDE,并且是操作一步记录一步写下来的。。。