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

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

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

 

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

 

标签:

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

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