树莓派配置OpenVPN
作者 Xinglong Liu | 发布于 2014-10-28
树莓派

树莓派配置OpenVPN

首先,需要安装openvpn

sudo apt-get install openvpn

安装完之后开始配置密匙

1.切换到root账户

sudo -s

2.复制easy-rsa的默认配置

cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

3.切换到目标路径

cd /etc/openvpn/easy-rsa

4.编辑vars指定easy-rsa路径

nano /etc/openvpn/easy-rsa/vars

将对应变量更改为

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

5.构建证书

  • 切换回easy-rsa目录

    cd /etc/openvon/easy-rsa

  • 配置
    • source ./vars → 这个"source"加载你之前修改的文件(vars)。
    • ./clean-all → 这会删除之前所有的密钥文件,如果有的话。如果在这个文件目录下有你不想删除的密钥文件,跳过这条命令。
    • ./build-ca → 最后一条来生成你的授权机构。

这里证书的配置可以不需要特别配置,直接一路Enter就可以。

6.接下来配置服务器

  • 创建服务器

    ./build-key-server [Server_Name] 注意用想要的名字代替 [Server_Name]

需要注意以下几个选项,其他的都可以直接Enter

  • Commom Name 必须是你为服务器取的名字。
  • A challenge password? 必须啥也不输,回车即可。
  • Sign the certificate? [y/n] 必须输入"y"。

出现 1 out of 1 certificate requests certified, commit? [y/n] 明显,输入"y"。,则服务器证书创建完毕。

7.创建客户端密匙 注意必须为每个连接vpn的客户端设置单独的密匙,否则无法同时连接

./build-key-pass UserName 这里用想用的客户端名称代替 UserName。

同样有重要的几项:

  • Enter PEM pass phrase 设置其为你记得住的密码!他会让你输入两次,不会有几率输入错误。
  • A challenge password? 必须留空!
  • Sign the certificate? [y/n] 同样签十年。

这还没完,需要对客户端的key进行加密

  • cd keys
  • openssl rsa -in Client1.key -des3 -out Client1.3des.key

使用des3加密生成的字符串文件,des3是一个复杂加密算法会在每一个数据块上运行3次,来防止骇客的暴力破解。OpenSSL 代表开源的加密套接字实现,是一个建立安全连接的标准方法。你需要为你生成的每一个客户端运行这一步。 有人会说这一步完全没有必要,你可以跳过这一步。但是如果你通过Android或者iOS设备连接OpenVPN,那么你必须要做这一步,不然的话目前版本在解析你的密钥时会有一些困难产生。

下面要生成Diffie-Hellman key exange,这是使你的VPN工作的关键代码,一个使两个没有先前信息的双方通过服务器交换密钥的协议。像RSA一样,这是现有的最早发明的加密系统。

  • cd /etc/openvpn/easy-rsa/
  • ./build-dh

这玩意花的时间够长,需要耐心等待。。。

最后,我们要实现OpenVPN内建的服务阻断攻击(Denial of Service -- DoS)防护。你可能已经知道服务阻断攻击是骇客找到你的服务器地址后很有效的攻击手段,这种攻击通过生成大量的访问请求来使你的服务器崩溃。 输入以下代码来生成静态的HMAC(hash-based message authentication code)密钥:

  • openvpn --genkey --secret keys/ta.key

8.最后 琐碎的东西都做完了,终于到了要开始配置服务器的时候了,服务器的配置文件如下:

local 192.168.1.13
dev tun 
proto udp #Some people prefer to use tcp. Don't change it if you don't know.
port 1194 
ca /etc/openvpn/easy-rsa/keys/ca.crt 
cert /etc/openvpn/easy-rsa/keys/[PiServer].crt # SWAP WITH YOUR CRT NAME
key /etc/openvpn/easy-rsa/keys/[PiServer].key # SWAP WITH YOUR KEY NAME
dh /etc/openvpn/easy-rsa/keys/dh1024.pem # If you changed to 2048, change that here!
server 10.8.0.0 255.255.255.0 
# server and remote endpoints 
ifconfig 10.8.0.1 10.8.0.2 
push "route 10.8.0.1 255.255.255.255" 
push "route 10.8.0.0 255.255.255.0" 
push "route 192.168.1.13 255.255.255.0" # SWAP THE IP NUMBER WITH YOUR RASPBERRY PI IP ADDRESS
push "dhcp-option DNS 192.168.1.1" # This should already match your router address and not need to be changed. 
push "redirect-gateway def1" 
client-to-client 
duplicate-cn 
keepalive 10 120 
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 
cipher AES-128-CBC 
comp-lzo 
user nobody 
group nogroup 
persist-key 
persist-tun 
status /var/log/openvpn-status.log 20 
log /var/log/openvpn.log 
verb 1
script-security 2 system 
client-connect /etc/openvpn/connect
client-disconnect /etc/openvpn/disconnect

为了备忘还是附上一个下载~ server.conf

泪大喜奔~~终于搞完这一堆代码了。。。

最后vpn上网关键的一步,需要转发流量,就跟win中允许共享网络一样。

nano /etc/sysctl.conf

找到

"Uncomment the next line to enable packet forwarding for IPv4。"

立即启用更改!!

sysctl -p

9.允许openvpn通过防火墙

nano /etc/firewall-openvpn-rules.sh 这是个空文件,输入

#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.8.0.0/24-o eth0 -j SNAT --to-source 192.168.XX.X

赋予该文件对应权限

  • chmod 700/etc/firewall-OpenVPN-rules.sh
  • chown root /etc/firewall-OpenVPN-ruels.sh

10.最后的准备工作 让vpn开机运行吧!

nano /etc/network/interfaces

找到带有"iface eth0 inet dchp"的那一行。 我们需要在这行之后的缩进中加上一行。 下面是这两行,一行新加入,一行原来就存在,在完成之后它应该差不多像这样:

  • iface eth0 inet dhcp
  • pre-up /etc/firewall-openvpn-rules.sh

搞定收工!每次树莓派重启之后就会启动openvpn了~