OpenWRT/LEDE路由器搭建OpenVPN服务器

日期:2017年10月16日 作者: 分类:运维 浏览:65515

硬件: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.crtca.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.crtserver.crtserver.keydh2048.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个,目前已经稳定运行一年多,除去电信本身的网络故障和停电的状况外,还没有一起因本方案不稳定引起的故障!

 

按照惯例,如有雷同,我抄你的 !

 

标签:

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/2017/10/1306.html