排行榜
推荐运维中心

本地搭建OPENVPN及FRP穿透

本文阅读 6 分钟
首页 运维中心 正文
广告

搭建前提:一个可外网访问的IP,没有就不用往下看了
本文内容:在内网环境中的一台虚拟机上搭建VPN服务端,使用FRP建立与外网服务器的访问隧道,移动端通过访问外网的映射建立与内网的VPN连接,实现外部网络访问内网的效果


构建VPN证书

yum install -y easy-rsa
# 若无法安装,添加epel yum源
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
mkdir -p /opt/easy-rsa
cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars
vi /opt/easy-rsa/vars 
# 解开并调整下列参数 除了首尾,随意设置


set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_REQ_COUNTRY     "China"
set_var EASYRSA_REQ_PROVINCE    "BeiJing"
set_var EASYRSA_REQ_CITY        "BeiJing"
set_var EASYRSA_REQ_ORG         "DaXing"
set_var EASYRSA_REQ_EMAIL       "12345789@163.com"
set_var EASYRSA_NS_SUPPORT      "yes"


# 初始化,创建pki目录用于存储证书
cd /opt/easy-rsa/
./easyrsa init-pki
./easyrsa build-ca



./easyrsa gen-req server nopass



./easyrsa sign server server



./easyrsa gen-req client nopass



./easyrsa sign client client




搭建VPN服务端

yum install -y openvpn
cd /etc/openvpn/
openvpn --genkey --secret /etc/openvpn/ta.key # 创建TLS认证密钥
openssl dhparam -out dh2048.pem 2048 # 创建交换证书
vi /etc/openvpn/server.conf


server.conf

#端口
port 1194
#协议
proto udp
#采用路由隧道模式
dev tun
#ca证书的位置
ca /opt/easy-rsa/pki/ca.crt
#服务端公钥的位置
cert /opt/easy-rsa/pki/issued/server.crt
#服务端私钥的位置
key /opt/easy-rsa/pki/private/server.key
#证书校验算法
dh dh2048.pem
#给客户端分配的地址池
server 10.8.0.0 255.255.255.0
#允许客户端访问的内网网段
push "route 192.168.15.0 255.255.255.0" # 根据实际更改
#地址池记录文件位置,未来让openvpn客户端固定ip地址使用的
ifconfig-pool-persist ipp.txt
#存活时间,10秒ping一次,120秒如果未收到响应则视为短线
keepalive 10 120
#最多允许100个客户端连接
max-clients 100
#日志位置,记录openvpn状态
status openvpn-status.log
#openvpn日志记录位置
log /var/log/openvpn.log
#openvpn版本
verb 3
#允许客户端与客户端之间通信
client-to-client
#通过keepalive检测超时后,重新启动VPN,不重新读取
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的,否则网络会先linkdown然后再linkup
persist-tun
#客户端密钥(证书和私钥)是否可以重复
duplicate-cn
#启动lzo数据压缩格式(非必须,开启的话客户端也必须开启)
#comp-lzo
# 对称加密算法,服务端和客户的配置要一样
cipher AES-256-CBC
auth SHA512
#开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1
tls-crypt /etc/openvpn/ta.key 0


firewall-cmd --zone=public --add-port=1194/udp --permanent
firewall-cmd --reload
systemctl start openvpn@server # 启动VPN
# 启用VPN后原端口都无法正常访问,可去  /etc/openvpn/firewall.sh 进行配置



如果使用systemctl start openvpn@server无法启动的话,可以用下面的方案:

openvpn /etc/openvpn/server.conf &

并加入开机启动:

chmod 777 /etc/rc.d/rc.local

vim /etc/rc.d/rc.local

加入

openvpn /etc/openvpn/server.conf &


客户端VPN

cd /etc/openvpn/
vi client.ovpn


client.ovpn

#指定当前VPN是客户端
client
#使用tun隧道传输协议
dev tun
#使用udp协议传输数据
proto udp
#openvpn服务器IP地址端口号
remote {{服务端IP}} 1194
#断线自动重新连接,在网络不稳定的情况下非常有用
resolv-retry infinite
#不绑定本地特定的端口号
nobind
#指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 3
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
# 对称加密算法,服务端和客户的配置要一样
cipher AES-256-CBC
auth SHA512


# 证书信息采用内置方式,方便移动端使用
echo "<ca>" >> client.ovpn
cat /opt/easy-rsa/pki/ca.crt  >> client.ovpn
echo "</ca>" >> client.ovpn
echo "<cert>" >> client.ovpn
cat /opt/easy-rsa/pki/issued/client.crt >> client.ovpn
echo "</cert>" >> client.ovpn
echo "<key>" >> client.ovpn
cat /opt/easy-rsa/pki/private/client.key >> client.ovpn
echo "</key>" >> client.ovpn
# tls-crypt ta.key 1
echo "key-direction 1" >> client.ovpn
echo "<tls-crypt>" >> client.ovpn
cat /etc/openvpn/ta.key >> client.ovpn
echo "</tls-crypt>" >> client.ovpn


客户端下载链接
OpenVPN Connect PC
OpenVPN Connect APK
若VPN是直接安装于即联通内网,又可外网访问的服务器或VPS,客户端下载完成后,导入上面生成的client.ovpn点击链接即可使用
OpenVPN Connec 3.4.0开始不再支持Android 8(8.1).


FRP

FRP releases 本文使用0.58.1

mkdir /opt/frp
cd /opt/frp
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
tar -zxvf frp_0.58.1_linux_amd64.tar.gz
cd frp_0.58.1_linux_amd64
vi frpc.toml


内网虚拟机使用客户端frpc: frpc.toml

# 访问服务端程序的服务器IP
serverAddr = "{{公网服务器IP}}"
# 服务端监听端口号,要与服务frps端端口一至
serverPort = 7000
# 验证连接,toke值,需要与服务frps端端口一至
auth.method = "token" # 非必须
# 验证连接,密码值,需要与服务frps端端口一至
auth.token = "vpn" # 非必须
[[proxies]]
# 服务名称,可在仪表盘中显示
name = "VPN"
# 穿透方式,http、tcp、udp、https、stcp等根据需要设置
type = "udp"
# 本地需要穿透的ip地址
localIP = "127.0.0.1"
# 需要穿透的服务端口号
localPort = 1194
# 连接隧道时用的端口
remotePort = 1195 # 自定义


公网服务器

mkdir /opt/frp
cd /opt/frp
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
tar -zxvf frp_0.58.1_linux_amd64.tar.gz
cd frp_0.58.1_linux_amd64
vi frps.toml


公网服务器使用服务端frps: frps.toml

#服务端监听端口
bindport = 7000 
#服务端连接身份认证,默认token,可根据自己需要进行配置
auth.method = "token" # 非必须
#服务端token密码,可根据自己需要进行配置
auth.token = "vpn" # 非必须
## 以下配置仅用于开启监控面板
#服务端限制IP
webserver.addr = "0.0.0.0"
#服务端仪表板端口,可以根据实际自定义访问端口号
webserver.port = 9211
#访间web时的账号
webserver.user = "admin"
#访间web时的密码
webserver.password = "admin"



firewall-cmd --zone=public --add-port=9211/tcp --permanent #面板
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=1195/udp--permanent
firewall-cmd --reload
## 若使用的是云服务器,还需去云服务官网配置安全组


调整client.ovpn中的remote属性为remote {{公网服务器IP}} 1195,连接即可

本文经授权后发布,本文观点不代表立场,文章出自:https://www.jianshu.com/p/12b436a15f08
群辉虚拟机virtual machine manager安装windows,windows跑不满千兆解决方案
« 上一篇 05-15
云主机-本地内网通信OPEN-VPN
下一篇 » 08-16
广告