@daduizhang
2018-09-30T20:33:56.000000Z
字数 3468
阅读 1238
未分类
OpenVPN是一个全功能的开源安全套接字层(SSL)VPN解决方案,它包含大量的配置信息。使得Windows,OS X,IOS以及Android客户端能够访问它。
openVPN服务端配置
openVPN客户端配置
(1) openVPN安装
系统:ubuntu16.4
- sudo apt-get update
- sudo apt-get install openvpn easy-rsa
#
(2) 安装CA目录
复制easy-rsa临时目录到我们的home目录下面:
$ mkdir ~/openvpn-ca
$ cp -r /usr/share/easy-rsa/* ~/openvpn-ca
然后进入ca目录进行配置
(3)配置CA变量
$ vim vars
配置如下信息:
exportKEY_COUNTRY="US"
exportKEY_PROVINCE="CA"
exportKEY_CITY="SanFrancisco"
exportKEY_ORG="Fort-Funston"
exportKEY_EMAIL="me@myhost.mydomain"
exportKEY_OU="MyOrganizationalUnit"
以上内容可自行更改,但不可为空
然后再对我们的vpn服务器进行命名:
export KEY_NAME="server" 可自行定义名称
(4)制作CA
确保你处在CA目录下面
$ cd ~/openvpn-ca
$ source vars
如果source正确的话,看到如下信息:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys
然后执行下面命令确保我们的操作处于一个clean环境中:
./clenan-all(制作好服务端证书不要轻易用此命令,会清除生成的证书)
制作CA:
./build-ca
制作过程中无限回车就好了
(5)制作服务端需要的证书
$ ./build-key-server server(这个是你所起的文件名正常和服务器名一致就行了)
无限回车,最后有两个地方需要输入yes
如果以上操作无误的话应该可以在keys中看到生成的server.crt、server.key和server.csr三个文件。其中server.crt和server.key两个文件是我们所需要的。现在再为服务器生成加密交换时的Diffie-Hellman文件:
./build-dh
这一步可能会等个一小会
最后生成一个HMAC签名来增强服务器的TLS完整性验证能力:
$ openvpn --genkey --secret keys/ta.key
(6)配置openVPN服务器
我们需要把刚刚生成的一些文件移到/etc/openvpn下
$ cd ~/openvpn-ca/keys
$ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
然后将openvpn的备份config拷贝到/etc/openvpn下
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ cd /etc/openvpn/
$ gzip -d server.conf.gz
然后修改openVPN的配置文件
$ sudo vim /etc\opevvpn/server.conf
相关配置
重要参数 | 参数说明 |
---|---|
local | 该命令是可选的,如果不设置,则默认监听本机的所有IP地址 |
port | 默认使用1194端口 |
proto tcp OR proto udp | OpenVPN使用TCP还是UDP协议 |
dev tap OR dev tun | dev tun将会创建一个路由IP隧道, dev tap将会创建一个以太网隧道 |
ca, cert, key | 根据easy-ras生成的一系列证书 |
dh | 指定迪菲·赫尔曼参数,可以根据easy-ras生成也可以自行生成此文件 |
server | 设置服务器端模式,并提供一个VPN子网,以便于从中为客户端分配IP地址。在此处的示例中,服务器端自身将占用10.8.0.1,其他的将提供客户端使用。如果你使用的是以太网桥接模式,请注释掉该行 |
ifconfig-pool-persist ipp.txt | 指定用于记录客户端和虚拟IP地址的关联关系的文件。当重启OpenVPN时,再次连接的客户端将分配到与上一次分配相同的虚拟IP地址 |
server-bridge | 该指令仅针对以太网桥接模式 |
push 'route' | 允许客户端访问VPN服务器自身所在的其他局域网 |
keepalive | 指令将导致类似于ping命令的消息被来回发送,以便于服务器端和客户端知道对方何时被关闭,每10秒钟ping一次,如果120秒内都没有收到对方的回复,则表示远程连接已经关闭 |
tls-auth ta.key | 服务器和每个客户端都需要拥有该密钥的一个拷贝,服务器端第二个参数为0 客户端应该为1 |
cipher | 选择加密算法 |
comp-lzo | 在VPN连接上启用压缩,如果客户端启用了这个指令那么客户端也需要启用 |
max-clients | 允许并发连接的客户端的最大数量 |
user nobody AND group nobody | 完成初始化工作之后,降低OpenVPN守护进程的权限,指令仅限于非Windows系统中使用 |
persist-key AND persist-tun | 持久化选项可以尽量避免访问那些在重启之后由于用户权限降低而无法访问的某些资源 |
status openvpn-status.log | 输出一个简短的状态文件,用于显示当前的连接状态,该文件每分钟都会清空并重写一次。 |
verb 3 | 为日志文件设置适当的冗余级别(0~9)。冗余级别越高,输出的信息越详细 |
mute 20 | 相同类别的信息只有前20条会输出到日志文件中 |
当前配置:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.2.0 255.255.255.0"
push "dhcp-option DNS 10.0.2.15"
keepalive 10 120
tls-auth ta.key 0
key-direction 0
cipher AES-128-CBC
auth SHA256
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
以上写出配置为启用状态的配置
(7) 调整ubuntu16.04服务的网络配置
a.允许IP转发
sudo vim /etc/sysctl.conf
将配置中的net.ipv4.ip_forward=1注释打开并退出保存
调整后使其生效
$ sudo sysctl -p
b.调整防火墙(UFW)规则来伪装客户端的连接
$ ip route | grep default
可以看到default via 172.18.31.253 dev eth0
然后添加相应的规则:
sudo vim /etc/ufw/before.rules
将下面内容放在# ufw-before-forward 下方
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0(changeto the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -jMASQUERADE
COMMIT
# END OPENVPN RULES
然后保存退出,并通知防火墙允许默认转发
$ sudo vim /etc/default/ufw
改成DEFAULT_FORWARD_POLICY="ACCEPT"
c.打开OpenVPN端口并且使变化生效
$ sudo ufw allow 1193/udp
$ sudo ufw allow OpenSSH
然后重启防火墙
$ sudo ufw disable
$ sudo ufw enable
(8)开启OpenVPN服务
$ sudo systemctl start openvpn@server(server是配置文件server的名称)
也可以用ip addr show tun0查看是否存在