树莓派搭建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
- 树莓派搭建Openvpn(一)
- OpenVPN解密(一)
- openvpn access server 一键搭建脚本
- 树莓派搭建Openvpn(二)使用UserPass方式登录
- openvpn 搭建
- 搭建openvpn
- 搭建OpenVPN
- VPS一键搭建OpenVPN的方法详解
- OpenVPN 服务器搭建详解
- openvpn搭建完全指南
- ubuntu10.04搭建openvpn
- WINxp Openvpn搭建
- Centos 搭建OpenVPN 服务器
- ubuntu 搭建 OPENVPN
- 搭建openvpn服务
- Openvpn基本搭建实例
- 十步搭建OpenVPN
- linux下openvpn搭建
- 显示意图
- JSTL <fmt:formatNumber>
- hadoop支持的数据类型
- Python 练习实例32
- java学习笔记(2)基本数据类型对象包装类
- 树莓派搭建Openvpn(一)
- node.js mongoose 插件
- rsync安全配置
- xcode6创建empty application
- 【matlab】:matlab做的图片关联性识别算法
- 自定义GridView在展示Item时发生错位!
- 王坚清华夜话:未来不是阿里和谷歌的竞争 而是清华和斯坦福的竞争
- UVA 1619Feel Good 感觉不错 迭代法 (2005 NE)
- ACM is my refuge