1. 介绍
有时候我们有这种想法,我自己的机器为啥 不能让别人直接访问呢,这样我操作起来多方便啊;
vpn 就可以解决这个问题;它所用的技术加虚拟网卡,具体可以参见官网;
本文思路,要把我们在本地部署的东东,放到公网上,那就得有一个公网的服务器,用于去暴露,即安装了VPN server 的机器;然后我们的主机以vpn client 方式,透传到公网,这样就实现了用很小的代价把我们自己的机器,部署到公网的目的;如果还是不好理解的话,那看下面的图图;
2. open vpn server 搭建
2.1 安装openvpn、easy-rsa、iptables-server
yum install epel-* -y
yum -y install openvpn easy-rsa iptables-services
2.2 生成证书及相关文件
利用easy-rsa生成相关证书文件
CA根证书
openvpn服务器证书
Diffie-Hellman算法用到的key 复制easy-rsa脚本到/etc/openvpn下面,该脚本是用来生成CA证书和各种key文件
复制easy-rsa脚本到/etc/openvpn下面,该脚本是用来生成CA证书和各种key文件
cp -r /usr/share/easy-rsa/ /etc/openvpn/
[root@openvpn openvpn]# cd /etc/openvpn/easy-rsa/3.0.8/
[root@openvpn 3.0.8]# ls
easyrsa openssl-easyrsa.cnf vars x509-types
#新建vars文件,编辑变量,初始化
[root@openvpn 3.0.8]# vim vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="ShangHai"
export KEY_CITY="ShangHai"
export KEY_ORG="YCZB"
export KEY_EMAIL="heian@heian.com"
[root@openvpn 3.0.8]# source ./vars
生成根证书
#初始化 pki 相关目录
./easyrsa init-pki
# 生成 CA 根证书, 输入 Common Name,名字随便起。
./easyrsa build-ca xiaoyuxxx
# 生成openvpn服务器证书和密钥,第一个参数是证书名称
./easyrsa build-server-full server xiaoyuxxx
# 生成Diffie-Hellman算法需要的密钥文件
./easyrsa gen-dh #创建 Diffie-Hellman ,时间比较久一些
# 生成tls-auth key,为了防止DDOS和TLS攻击,这个属于可选安全配置
openvpn --genkey --secret ta.key
# openvpn文件整理
mkdir /etc/openvpn/server/certs
cd /etc/openvpn/server/certs/
# SSL 协商时 Diffie-Hellman 算法需要的 key
cp /etc/openvpn/easy-rsa/3/pki/dh.pem ./
# CA 根证书
cp /etc/openvpn/easy-rsa/3/pki/ca.crt ./
# open VPN 服务器证书
cp /etc/openvpn/easy-rsa/3/pki/issued/yczbjt.crt ./server.crt
# open VPN 服务器证书 key
cp /etc/openvpn/easy-rsa/3/pki/private/yczbjt.key ./server.key
# tls-auth key
cp /etc/openvpn/easy-rsa/3/ta.key ./
# 创建openvpn日志目录
[root@openvpnservice certs]# /etc/openvpn/cdd
#创建日志目录
[root@openvpnservice certs]# mkdir -p /var/log/openvpn/
#给予权限
[root@openvpnservice certs]# chown openvpn:openvpn /var/log/openvpn
2.3 配置OpenVpn server.conf
port 1194 #监听端口
proto udp #监听协议
dev tun #采用路由隧道模式
ca /etc/openvpn/server/certs/ca.crt
cert /etc/openvpn/server/certs/server.crt
key /etc/openvpn/server/certs/server.key
dh /etc/openvpn/server/certs/dh.pem
tls-auth /etc/openvpn/server/certs/ta.key 0
server 10.8.0.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp" #给网关
push "dhcp-option DNS 8.8.8.8" #dhcp分配dns
client-to-client #客户端之间互相通信
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
comp-lzo #传输数据压缩
max-clients 100 #最多允许 100 客户端连接
user openvpn #用户
group openvpn #用户组
persist-key
persist-tun
log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
verb 3
#explicit-exit-notify 1
2.4 配置防火墙及安全服务
#禁用firewalld,启用iptables
[root@openvpnservice openvpn]# systemctl stop firewalld
[root@openvpnservice openvpn]# systemctl disable firewalld
# 关闭selinux
[root@openvpnservice openvpn]# sed -i 's/SELINUX=enforcinf/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@openvpnservice openvpn]# setenforce 0
# 启用iptables
[root@openvpnservice openvpn]# systemctl start iptables
[root@openvpnservice openvpn]# systemctl enable iptables
iptables -F
# 添加防火墙规则
[root@openvpnservice openvpn]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
[root@openvpnservice openvpn]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
[root@openvpnservice openvpn]# systemctl restart iptables
# 服务器启用IP地址转发
[root@openvpnservice openvpn]# echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
[root@openvpnservice openvpn]# sysctl -p
net.ipv4.ip_forward = 1
2.5 启动服务
systemctl start openvpn@server # 启动
systemctl enable openvpn@server # 开机自启动
systemctl status openvpn@server # 查看服务状态
2.6 生成客户端连接文件
模板文件
# 创建模版配置文件
[root@openvpnservice ~]# cd /etc/openvpn/client/
[root@openvpnservice client]# vim sample.ovpn
client
proto udp
dev tun
remote 82.157.x.x 1194 #openvpn公网映射的ip地址和端口
ca ca.crt
cert admin.crt
key admin.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings
#dynamic -1
#路由转发
route-nopull
route 10.8.0.0 255.255.0.0 vpn_gateway
[root@openvpnservice client]# chmod 777 sample.ovpn
生成证书文件
[root@openvpnservice client]# sh ovpn_user.sh mac
[root@VM-24-14-centos client]# ls keys/
mac mac.zip
3. 客户端安装使用
mac
下载客户端并安装,下载地址:openvpn.net/client-conn…
复制 2.6中的mac.zip 到mac 机器上;
解压并打开 mac.ovpn ; 即可连接成功;
android
安卓端与mac 端类似;需要注意的是可能出现 文件权限不足的问题;需要将证书文件全都正道到 mac.ovpn 中;demo如下;
client
proto udp
dev tun
remote 82.157.x.x 1194 #openvpn公网映射的ip地址和端口
#ca ca.crt
#cert mi-10.crt
#key mi-10.key
#tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings
#路由转发
route-nopull
route 10.8.0.0 255.255.0.0 vpn_gateway
<ca>
</ca>
<cert>
</cert>
key-direction 1
<key>
</key>
<tls-auth>
</tls-auth>
linux命令行
yum install openvpn
nohup openvpn /etc/klvpn.ovpn &
开机自启动配置:
[root]cd cd /etc/rc.d/init.d/
[root]vim vpn_start.sh
#!/bin/sh
#chkconfig:2345 80 90
#decription:autostart
cd /root/soft/vpn
nohup openvpn *.ovpn >/dev/null 2>&1 &
[root]chmod +x vpn_start.sh
[root]chkconfig --add vpn_start.sh
[root]chkconfig vpn_start.sh on
如果报找不到软件包,执行下面命令,更新仓库来源
yum install -y epel-release
4. open-vpn可以用来干啥
4.1 远程连接桌面
充当远程连接工具使用,比ToDesk ,team-view, 要稳定多了; 因为我们走的专线嘛😄;
示例,比如我们在公司用的mac ,家里用的台式机windows;
第一步:在mac、Windows上都安装上 open-vpn-client 并打开;
第二步:远程连接,这里仅示范mac 连windows 的;
mac 上下载 Microsofe Remote Desktop, 输入windows 的 vpn 地址,登录账号,密码,连接;
带劲嘛,那何止是带劲,爽的一批好不;
4.2 服务互联
在需要互联的服务上使用open-vpn-client 工具,这样互联的服务网段就一样了,方便控制;