基于OpenVPN实现随时随地访问家里的NAS

 1年前     665  

文章目录

最近在家里弄了一个Unraid玩玩,开了几个服务(如 Bitwarden、Jellyfin、aria2-with-ariang),平时在家里使用的比较多,出了家门想用就没办法使用了,就想弄一个能随时随地访问服务,又不发布在公网上的功能,想到的解决办法是使用VPN技术。因为家里使用的是电信宽带,无法申请公网IP地址,所以只能使用云服务器作为中转站,在网上查阅了很多资料,了解到OpenVPN既能实现VPN功能,又能进行加密传输,数据安全和数据传输都得到了保障,所以我开始找关于OpenVPN的技术文档,但却都没有一个详细的教程,最后通过自己摸索和部分技术文档实现了我所需要的功能,因此我写此教程即用于记录也希望能帮助其他人。

拓扑图

基于OpenVPN实现随时随地访问家里的NAS

前提条件

1、云服务器,不限制云服务商但是必须要公网IP地址,且有最高权、能放行端口

2、家里有一台能安装OpenVPN Client客户端的路由器,我是用的是红米AC2100,刷的OpenWRT系统

3、远程使用的OpenVPN Client的客户端,比如手机、电脑

教程

1、使用Docker安装OpenVPN服务端

获取最新版本的 Docker 安装包

wget -qO- https://get.docker.com/ | sh

启动docker服务,验证docker信息,命令如下:

sudo service docker start
docker version

拉取OpenVPN镜像到本地,并初始化docker容器

# 拉取OpenVPN的镜像
docker pull kylemanna/openvpn

# 新建OpenVPN的工作目录
mkdir /etc/openvpn

# 初始化容器以保存配置文件和证书。容器将提示用户输入一个密码以保护新生成的证书授权机构使用的私钥
# xx.xx.xx.xx为您服务器的公网IP地址
docker run -v /etc/openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://xx.xx.xx.xx:1194
docker run -v /etc/openvpn:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

启动过程中需要输入证书密码和域名,请注意输入密码时不会显示任何信息;

基于OpenVPN实现随时随地访问家里的NAS

基于OpenVPN实现随时随地访问家里的NAS

启动OpenVPN Server进程,启动后可以输入 docker ps查看运行容器信息

docker run \
 --name openvpn \
 --restart=always \
 --privileged=true \
 -v /etc/openvpn/:/etc/openvpn \
 -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
 -p 1194:1194/udp \
 --cap-add=NET_ADMIN  \
 -d kylemanna/openvpn

基于OpenVPN实现随时随地访问家里的NAS

2、配置OpenVPN服务端

修改/etc/openvpn.config配置文件如下:

server 192.168.255.0 255.255.255.0
verb 3
key /etc/openvpn/pki/private/192.168.175.128.key
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/192.168.175.128.crt
dh /etc/openvpn/pki/dh.pem
tls-auth /etc/openvpn/pki/ta.key
key-direction 0
keepalive 10 60
persist-key
persist-tun

proto udp
# Rely on Docker to do port mapping, internally always 1194
port 1194
dev tun0
status /tmp/openvpn-status.log

# VPN连接后分配的IP地址将记录在ipp.txt中,下次连接VPN继续使用此IP地址
ifconfig-pool-persist ipp.txt
# 客户端互联
client-to-client
# 客户端所在的局域网联通
client-config-dir /etc/openvpn/ccd
user nobody
group nogroup
comp-lzo no

### Route Configurations Below
route 192.168.254.0 255.255.255.0

### Push Configurations Below
push "block-outside-dns"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "comp-lzo no"

配置文件修改完成后,重新启动docker容器

# 先暂停openvpn容器
docker stop openvpn

# 后启动openvpn容器
docker start openvpn

在 /etc/openvpn/ccd目录下, 为局域网的VPN网关创建配置文件,配置文件的文件名要和客户名相同。

我为家中路由器生成的证书名称为OpenWRT,内网网段为192.168.1.0/24,所以配置文件为:

vi ccd/OpenWRT

# 键入i,在文件里添加路由信息
iroute 192.168.1.0 255.255.255.0

# 键入Esc,输入:wq 保存退出

3、配置OpenVPN客户端

生成带密码的客户端证书,作为电脑和手机的VPN证书,每次登录VPN时,都需要输入密码;

docker run -v /etc/openvpn/:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full client001
输入密码:******

生成不带密码的客户端证书,作为OpenWRT的VPN证书,VPN连接时不用输入密码;

docker run -v /etc/openvpn/:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full OpenWRT nopass

导出证书,并下载到本地

docker run -v /etc/openvpn/:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient client001 > /etc/openvpn/client001.ovpn

docker run -v /etc/openvpn/:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient client001 > /etc/openvpn/OpenWRT.ovpn

修改client001.ovpn远程客户端证书,禁用默认路由,新增局域网192.168.1.0的路由和指向服务端的路由;

# redirect-gateway def1
route-nopull
route 192.168.1.0 255.255.255.0  vpn_gateway
route 192.168.255.0 255.255.255.0  vpn_gateway

修改OpenWRT.ovpn客户端证书,禁用默认路由,新增一条指向服务端的路由;

# redirect-gateway def1
route-nopull
route 192.168.255.0 255.255.255.0  vpn_gateway

将OpenWRT.ovpn导入到家中路由器的OpenVPN客户端中,并启用;

将client001.ovpn导入到手机或者电脑的OpenVPN客户端中,点击连接并输入密码,等待连接完成后即可访问家中的服务。

 

参考资料

OpenVPN Docker搭建 - 简书 (jianshu.com)

kylemanna/openvpn - Docker Image |码头工人中心

使用OpenVPN实现局域网互联 (itxueyuan.com)

【腾讯云】2核2G4M云服务器新老同享99元/年,续费同价
版权声明:ADMIN 发表于 1年前,共 3226 字。
转载请注明:基于OpenVPN实现随时随地访问家里的NAS | 奎利

暂无评论

暂无评论...