树莓派搭建Openvpn(一)

来源:互联网 发布:sql server数据类型 编辑:程序博客网 时间:2024/05/29 12:33

使用Openvpn的原因有几个:
1. 安全:连接公共无线网络很容易暴露自己的敏感数据
2. 翻墙:我司屏蔽QQ,知乎,视频网站…
3. 装逼:买了树莓派,就要用起来啊
4. 学习:Linux,计算机网络,网络安全

1.安装Openvpn

apt-get install openvpn

2.下载easy-rsa

cd /etc/openvpnwget --no-check-certificate https://github.com/OpenVPN/easy-rsa/releases/download/2.2.2/EasyRSA-2.2.2.tgztar -xzvf EasyRSA-2.2.2.tgzmv EasyRSA-2.2.2 easy-rsa

3.配置easy-rsa

cd /etc/openvpn/easy-rsanano vars    # 打开easy-rsa配置文件

a. 编辑密钥存储路径

export EASY_RSA="/etc/openvpn/easy-rsa"

b. 编辑dh密钥大小

export KEY_SIZE=1024 #默认的2048太大,要运算很久

c. 加载配置

source ./vars

4.生成密钥
a. 生成ca密钥

./clean-all      # 先清空所有密钥./build-ca     

所有输入取默认值就可以了,直接回车;keys文件夹下多了ca.crt ca.key

b. 生成服务器密钥

./build-key-server server   # 参数为服务器名字

接下来的输入中,只需填写Common Name,这里为mypi。
询问是否认证的地方,同意就行了。经过这一步,keys文件夹中又多出来3个文件
server.csr(证书签发请求文件) server.crt(公钥) server.key(私钥)

c. 生成客户端密钥

./build-key-pass client1

Enter PEM pass phrase: 输入客户端密钥的密码,这里输入test123,会让你输两次。其它默认就好经过这步后,又多了3个文件 client1.csr client1.crt client.key

d. 生成dh

./build-dh

这一步要等久一点,现在又多了一个文件 dh1024.pem

到这里为止,使用easy-rsa生成密钥部分,就完成了~

5.Openvpn服务端配置

# 复制一个模板过来先cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf# 打开编辑之nano /etc/openvpn/server.conf
# 里面都有注释,这里直接帖出修改结果吧,注释跟用不到的选项都被我删除了local 192.168.1.111     #树莓派的内网静态IP,这里要改成你的PI的静态内网IPport 1194   #Openvpn服务使用的端口proto udp   #使用udp协议传输dev tun     #使用隧道ca /etc/openvpn/easy-rsa/keys/ca.crt        #ca公钥路径cert /etc/openvpn/easy-rsa/keys/server.crt  #服务器公钥路径key /etc/openvpn/easy-rsa/keys/server.key   #服务器私钥路径dh /etc/openvpn/easy-rsa/keys/dh1024.pem    #dhserver 10.8.0.0 255.255.255.0   #客户端连接后,所在的子网段ifconfig-pool-persist ipp.txt   #客户端使用固定的子网地址,这里可以不配置push "redirect-gateway def1 bypass-dhcp"    #网关重定向,客户端的流量都会经由OpenvpnServerpush "dhcp-option DNS 192.168.1.1"          #配置DNS,这里配置路由器的内网地址即可duplicate-cn    #允许客户端的CommonName重复,因为我们填的都是默认值keepalive 10 120comp-lzo    #启动数据压缩user nobody     #Openvpn进程运行时所属的用户,这里为了安全group nogroup   #Openvpn进程运行时所属的组,这里为了安全persist-key     #一直保存key,避免权限问题导致不能再次读取persist-tun     #一直保持隧道,原因同上status openvpn-status.log   #Openvpn运行状态Log,就在Openvpn目录下,会自动生成log openvpn.log             #Openvpn运行Log,也在Openvpn目录下,会自动生成verb 3                      #log的等级
#测试服务器配置文件正确,没有输出说明正确,错误会提示哪行配错了openvpn server.conf#开始Openvpn服务,提示ok说明启动成功了service openvpn restart

6.Openvpn客户端配置

# 复制一个模板先cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/clientconfig/client.conf# 编辑之nano /etc/openvpn/clientconfig/client.conf
# 里面注释也很详细,这里贴出我精简后的结果client      #标明是客户端配置dev tun     #使用隧道proto udp   #使用UDPremote test.jios.org 1194   #树莓派外网IP(使用动态域名绑定) + 端口comp-lzo        ca ca.crt       #ca公钥cert wxlnb.crt  #客户端公钥key wxlnb.key   #客户端私钥verb 3  #log等级

7.防火墙添加规则

cd /etc/openvpnnano firewall-openvpn.sh#添加以下内容并保存#!/bin/sh#允许接收目的端口为1194的包;1194就是server.conf中配置的端口iptables -A INPUT -p udp --dport 1194 -j ACCEPT#源地址转换:将vpn子网的ip替换为pi的本地ipiptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.1.111#编辑完后,更改脚本的读写权限,为了安全chmod 700 firewall-openvpn.sh#设置自动启动nano /etc/network/interfaces#新添加的为最后一行,注意Tab对齐auto loiface lo inet loopbackauto eth0iface eth0 inet static    address 192.168.1.111    netmask 255.255.255.0    gateway 192.168.1.1    pre-up /etc/openvpn/firewall-openvpn.sh

8.开启系统针对ipv4的转发

nano /etc/sysctl.conf #编辑一行为net.ipv4.ip_forward=1#配置生效sysctl -p

9.路由器添加端口转发
将所有1194过来包,都转发到Pi的1194端口,极路由的设置结果如下:
端口转发

10.动态域名绑定
使用极路由提供的插件就可以完成
动态域名绑定

11.客户端连接
安装客户端:
Openvpn for windows: https://yunpan.cn/cqhzz5LTCdG2R 访问密码 c332
Openvpn for android: https://yunpan.cn/cqhz4jHXkUjyY 访问密码 f688

安装后,将client.conf,ca.crt,client1.crt,client1.key这4个文件拷贝至Openvpn的配置目录下,并且将client.conf改名为client.ovpn。然后登录,输入生成客户端密钥时设置的密码。如果登录失败可以看客户端log,判断原因在哪里。

推荐使用xshell登录pi来操作,提供的有xftp,从pi下载配置文件到电脑,很方便。

最后祝大家搞机快乐,openvpn能成功跑起来,我折腾了好久啊,有几个原因:
1.linux不熟悉
2.openvpn运行流程不熟悉
3.路由相关知识不熟悉
4.iptables不熟悉

下篇文章讲一种更简单的客户端验证方式:
http://blog.csdn.net/wxlguitar/article/details/51184484

2 0
原创粉丝点击