OpenWRT/LEDE路由器搭建OpenVPN服务器
硬件:NETGEAR WNDR3800 v1
系统:LEDE 17.01.3
关于OpenWRT和LEDE的关系,此处不多啰嗦,可自行Google之。至于路由器如何刷LEDE,网上有大把优秀的教程,此处也不赘述。
一、安装搭建openvpn所需要的软件
首先,ssh登录路由器并更新软件源:
# 登录路由器 ssh root@192.168.1.1 # 更新软件源 opkg update
更新完成后安装需要的软件:
opkg install openvpn-easy-rsa openvpn-mbedtls
二、使用easy-rsa生成需要的证书文件
首先编辑 /etc/easy-rsa/vars
文件设置相关变量
# 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中设置过了,这里全部按回车就行
build-ca
此命令生成的ca.crt
和ca.key
会保存在/etc/easy-rsa/keys
目录下
然后生成一个Diffie-Hellman交换密钥
build-dh
此命令时间很长,需要耐心等待。
生成服务器端证书和密钥
# 此处的 server 为服务端证书,可根据需要自行设置 build-key-server server
运行该命令后会提示输入一些参数,此处我全部留空,但要注意,提示输入[y/n]时输入y,这样就完成服务器端证书生成了。
生成客户端证书
# 此处的 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
区域
################################################# # 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目录
mkdir /etc/openvpn/ccd
这里我将之前生成的uvs-001的客户端IP设置为如下10.10.10.101,子网掩码为255.255.255.0
vi /etc/openvpn/ccd/uvs-001
配置文件如下:
ifconfig-push 10.10.10.101 255.255.255.0
最后让OpenVPN服务器开机启动:
/etc/init.d/openvpn enable
四、防火墙配置
首先在 /etc/config/firewall 文件最后添加如下规则:
config rule option target 'ACCEPT' option name 'Allow-OpenVPN-Wan-Inbound' option src 'wan' option proto 'udp' option dest_port '1194'
然后在 /etc/firewall.user 文件最后添加如下规则:
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,并且是操作一步记录一步写下来的。。。