当前位置: 首页 > news >正文

使用软路由(openWrt)安装openVPN搭建局域网连接

前言

我是从抖音的一位老哥的需求,得知这个openWrt的,用这个可以搭建软路由,也能和Linux系统一样执行ssh命令,也能安装openVPN,这个主要是从安装到联网到配置的详细教程

OpenWrt(说明一下什么是OpenWrt)

首先就是openWrt的官网:https://openwrt.org/zh/start

说明:

OpenWrt项目是一个针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统。这使您可以从供应商提供的应用范围和配置中解脱出来,并且让您通过使用适配任何应用的软件包来定制设备。对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。

看完上面,你可能对openWrt有更好的了解了,接下来就是下载和配置了,由于我是在本地电脑上的虚拟机安装的所以连接后会出现问题,我这里先提前说一下

正文

  • 1.下载

首先就是去阿里云镜像仓库:https://mirrors.aliyun.com/openwrt/releases下载我OpenWrt的镜像,我这里下载的是下面这个版本,点进去
我这里下载的是这个版本
点击下载镜像
点击下载镜像

  • 2.使用Vmware安装镜像

下载好后,直接解压
解压完成
下载一个工具(StarWind V2V Image Converterhttps://www.starwindsoftware.com/tmplink/starwindconverter.exe),在windows上可以把image给转换成Vmware的存储文件,把image转换成vmdk格式
下载好后得到下面这个exe程序
点击安装
点击安装,一直无脑下一步就行,接着就是打开软件,选择Local file点击下一步
选择
下面选择你下载好解压后的img结尾的镜像然后点击下一步
选择镜像
到下面接着点击下一步
点击下一步
接着点击下一步
接着点击下一步
再接着点击下一步
再接着点击下一步
选择生成vmdk文件的位置,默认在你镜像的那个文件夹同目录下,点击生成
生成文件的位置
需要注意的是存放镜像和解压路径下不能含有中文,我上面的路径就是有中文,所以会报错,不过我把img镜像更换之后就可以直接转换成功了
转化成功
接着就是去VMware设置安装,新建虚拟机->自定义(高级)->稍后安装操作系统,接下来就是看图片了
选择其他linux
选择我们生成的磁盘文件
选择磁盘文件
成功点亮,安装成功
安装成功

  • 3.配置OpenWrt让其能联网

首先输入下面这个,进行修改密码

passwd

如果出现下面这个说明修改密码成功,说明一下输入密码部分不展示,也就是说你输入的密码看不到
修改密码
接下来就是输入下面的命令进行修改虚拟机或者你当前连接着网络的ip地址

vim /etc/config/network

输入修改命令
vim语法我就不赘述了,上网自己查.再修改你虚拟机所在的网段,或者连接的网线的网段,随便配置一个ip,保存退出
修改ip
保存成功后,输入下面这个,重启

reboot

重启
重启成功之后,到你的电脑上的浏览器输入你刚刚配置好的IP地址

http://192.168.66.66

下面这个输入密码是需要输入一开始配置好的密码
输入密码
输入完密码之后就可以进入页面配置dns,如果不配置dns就会没有网络
编辑
配置网关
配置dns保存
点击应用并保存
如此就可以联网了,但是联网之前,先ssh连接配置好一些东西,ssh如何连接上网查这里就不过多赘述了

这条命令是用来更换阿里云镜像的,下载软件贼拉快

sed -i 's_downloads.openwrt.org_mirrors.aliyun.com/openwrt_' /etc/opkg/distfeeds.conf

更换阿里云镜像
更新软件命令:opkg update
更新软件
安装中文命令:opkg install luci-i18n-base-zh-cn

安装openVPN命令:opkg install openvpn-openssl luci-app-openvpn openvpn-easy-rsa openvpn-mbedtls luci-i18n-openvpn-zh-cn

安装防火墙中文命令:opkg install luci-i18n-firewall-zh-cn

开启xftp命令

opkg install vsftpd openssh-sftp-server
/etc/init.d/vsftpd enable
/etc/init.d/vsftpd start
  • 4.配置openVPN

    • 配置防火墙开放相应端口
# Configure firewall
uci rename firewall.@zone[0]="lan"
uci rename firewall.@zone[1]="wan"
uci rename firewall.@forwarding[0]="lan_wan"
uci del_list firewall.lan.device="tun0"
uci add_list firewall.lan.device="tun0"
uci -q delete firewall.vpn
uci set firewall.ovpn="rule"
uci set firewall.ovpn.name="Allow-OpenVPN"
uci set firewall.ovpn.src="wan"
uci set firewall.ovpn.dest_port="1194"
uci set firewall.ovpn.proto="udp"
uci set firewall.ovpn.target="ACCEPT"
uci commit firewall
/etc/init.d/firewall restart
  • 生成服务器和客户端证书(其中如果有冒号是让你输入自定义密钥的密码)
# Configuration parameters
export EASYRSA_PKI="/etc/easy-rsa/pki"
export EASYRSA_REQ_CN="ovpnca"# Remove and re-initialize the PKI directory
easyrsa --batch init-pki# Generate DH parameters
# 此步会较久
easyrsa --batch gen-dh# Create a new CA
easyrsa --batch build-ca nopass# Generate a keypair and sign locally for a server
easyrsa --batch build-server-full server nopass# Generate a keypair and sign locally for a client
easyrsa --batch build-client-full client nopass
  • 生成服务器配置文件
# Generate TLS PSK
OVPN_PKI="/etc/easy-rsa/pki"
openvpn --genkey --secret ${OVPN_PKI}/tc.pem# Configuration parameters
OVPN_DIR="/etc/openvpn"
OVPN_PKI="/etc/easy-rsa/pki"
OVPN_DEV="$(uci get firewall.lan.device | sed -e "s/^.*\s//")"
OVPN_PORT="$(uci get firewall.ovpn.dest_port)"
OVPN_PROTO="$(uci get firewall.ovpn.proto)"
OVPN_POOL="192.168.8.0 255.255.255.0"
OVPN_DNS="${OVPN_POOL%.* *}.1"
OVPN_DOMAIN="$(uci get dhcp.@dnsmasq[0].domain)"
OVPN_DH="$(cat ${OVPN_PKI}/dh.pem)"
OVPN_TC="$(sed -e "/^#/d;/^\w/N;s/\n//" ${OVPN_PKI}/tc.pem)"
OVPN_CA="$(openssl x509 -in ${OVPN_PKI}/ca.crt)"
NL=$'\n'# Configure VPN server
umask u=rw,g=,o=
grep -l -r -e "TLS Web Server Auth" "${OVPN_PKI}/issued" \
| sed -e "s/^.*\///;s/\.\w*$//" \
| while read -r OVPN_ID
do
OVPN_CERT="$(openssl x509 -in ${OVPN_PKI}/issued/${OVPN_ID}.crt)"
OVPN_KEY="$(cat ${OVPN_PKI}/private/${OVPN_ID}.key)"
cat << EOF > ${OVPN_DIR}/${OVPN_ID}.conf
verb 3
user nobody
group nogroup
dev ${OVPN_DEV}
port ${OVPN_PORT}
proto ${OVPN_PROTO}
server ${OVPN_POOL}
topology subnet
client-to-client
keepalive 10 120
persist-tun
persist-key
push "dhcp-option DNS ${OVPN_DNS}"
push "dhcp-option DOMAIN ${OVPN_DOMAIN}"
push "redirect-gateway def1"
push "persist-tun"
push "persist-key"
<dh>${NL}${OVPN_DH}${NL}</dh>
<tls-crypt>${NL}${OVPN_TC}${NL}</tls-crypt>
<ca>${NL}${OVPN_CA}${NL}</ca>
<cert>${NL}${OVPN_CERT}${NL}</cert>
<key>${NL}${OVPN_KEY}${NL}</key>
EOF
done
/etc/init.d/openvpn restart
  • 生成客户端ovpn文件
# 先确定使用DDNS还是公网IP作为OpenVPN连接使用,并配置好OVPN_SERV参数,本次以DDNS地址为例子
OVPN_SERV="192.168.66.66"# Configuration parameters
OVPN_DIR="/etc/openvpn"
OVPN_PKI="/etc/easy-rsa/pki"
OVPN_DEV="$(uci get firewall.lan.device | sed -e "s/^.*\s//")"
OVPN_PORT="$(uci get firewall.ovpn.dest_port)"
OVPN_PROTO="$(uci get firewall.ovpn.proto)"
OVPN_TC="$(sed -e "/^#/d;/^\w/N;s/\n//" ${OVPN_PKI}/tc.pem)"
OVPN_CA="$(openssl x509 -in ${OVPN_PKI}/ca.crt)"
NL=$'\n'# Generate VPN client profiles
umask u=rw,g=,o=
grep -l -r -e "TLS Web Client Auth" "${OVPN_PKI}/issued" \
| sed -e "s/^.*\///;s/\.\w*$//" \
| while read -r OVPN_ID
do
OVPN_CERT="$(openssl x509 -in ${OVPN_PKI}/issued/${OVPN_ID}.crt)"
OVPN_KEY="$(cat ${OVPN_PKI}/private/${OVPN_ID}.key)"
cat << EOF > ${OVPN_DIR}/${OVPN_ID}.ovpn
verb 3
dev ${OVPN_DEV%%[0-9]*}
nobind
client
remote ${OVPN_SERV} ${OVPN_PORT} ${OVPN_PROTO}
auth-nocache
remote-cert-tls server
<tls-crypt>${NL}${OVPN_TC}${NL}</tls-crypt>
<ca>${NL}${OVPN_CA}${NL}</ca>
<cert>${NL}${OVPN_CERT}${NL}</cert>
<key>${NL}${OVPN_KEY}${NL}</key>
EOF
done
ls ${OVPN_DIR}/*.ovpn

上面这些配置都运行好了之后就可以进行连接了

后记

看了上面的文档肯定还有些不懂的就是,文件在哪

/etc/openvpn下面有.oven文件,到时候直接下载下来就可以用connectVPN来连接了
连接成功
OpenVPN Connect连接工具如何使用这里也不赘述了,可以去openVPN官网,也可以看我上一篇文章叫搭建OpenVPN的文章来看,下载客户端的话,可以去我的公众号幸识SQ去下载

如果我的博客帮助到了你,那你可以到我的博客https://blog.csdn.net/weixin_57228276或者微信公众号搜索幸识SQ,或者是我的个人空间https://xssq.online在那里可以找到我,里面也有更多的优秀文章.也可以到我的抖音:su520520520521查看相关的教程视频

相关文章:

  • 【C++】入门三
  • 机器学习与图像识别(二)—— OpenCV环境折腾。。
  • 【Linux】20、进程状态:不可中断进程、iowait、僵尸进程、dstat strace pstree
  • oracle-buffer cache
  • 华为模拟器dhcp实验
  • X3DAudio1_7.dll丢失原因,X3DAudio1_7.dll丢失怎样解决分享
  • 星火模型(Spark)的langchain 实现
  • TDengine 跨版本迁移实战
  • lambda表达式c++
  • php mysql 如何处理查询中存在正则特殊字符的查询
  • 十、Linux运行级别
  • 常见的SQL语句及函数
  • 线程的三种创建方式
  • GitHub如何删除仓库
  • 数据分析—将txt文件转为csv文件;将csv文件转为xls文件
  • Google 是如何开发 Web 框架的
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • css系列之关于字体的事
  • es6--symbol
  • JAVA_NIO系列——Channel和Buffer详解
  • Java应用性能调优
  • Logstash 参考指南(目录)
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Python语法速览与机器学习开发环境搭建
  • sessionStorage和localStorage
  • Solarized Scheme
  • SpringCloud集成分布式事务LCN (一)
  • 精彩代码 vue.js
  • 时间复杂度与空间复杂度分析
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 推荐一个React的管理后台框架
  • 微信小程序开发问题汇总
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​ubuntu下安装kvm虚拟机
  • #Linux(Source Insight安装及工程建立)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)Eureka服务搭建,服务注册,服务发现
  • (一) springboot详细介绍
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • ..回顾17,展望18
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net Winform开发笔记(一)
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET下的多线程编程—1-线程机制概述
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • /var/spool/postfix/maildrop 下有大量文件
  • @Autowired和@Resource装配
  • [ C++ ] 继承
  • [AIGC codze] Kafka 的 rebalance 机制