虚拟网卡趣体验

570 阅读5分钟

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 工具,这样互联的服务网段就一样了,方便控制;

参见

blog.51cto.com/heian99/322…

cloud.tencent.com/developer/a…

www.ktanx.com/blog/p/3986