OpenVPN server

来自Ubuntu中文
跳到导航跳到搜索

OpenVPN

我们可以把处于LAN环境下的特定计算机设置为一个VPN服务器,这个服务器可以让处于LAN之外的远程客户端和LAN上的计算机进行加密通信(通过VPN服务器接入). 当两台终端建立VPN 连接通道(服务端和客户端)时,OpenVPN 使用 PKI(Public Key Infrastructure)对其进行加密.

VPN 服务器的硬件需求取决于最大的并发通信隧道的数量.通俗的来讲,最为普通配置的电脑可以胜任一台并发连接数不大于10的VPN服务器.而一台不大于100个并发连接数的VPN服务器则需要较高的内存和CPU配置.网络连接也是一个限制因素,所以,高配的网卡也是必须的(至少支持千兆网卡).

使用桥接模式

OpenVPN 服务器通常使用桥接模式.一个网络(如:eth0)连接到WAN(互联网),这个连接用来接入VPN请求,另外一个(如:eth1)连接到LAN(局域网),VPN数据的流动在这两个网络间可以理解为被”桥接”了.查看Network Interface Bridging获取详情.

OpenVPN 服务器的安装

  • 安装 OpenVPN:
sudo apt-get install openvpn easy-rsa

服务器证书

  • 创建OpenVPN服务器证书.
  • 复制 easy-rsa 目录到 /etc/openvpn. 这个操作确保在包更新后脚本内容不会丢失.
sudo mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
  • 编辑 /etc/openvpn/easy-rsa/vars 根据实际情况在其中修改相应的环境变量:
export KEY_COUNTRY="US"
export KEY_PROVINCE="NC"
export KEY_CITY="Winston-Salem"
export KEY_ORG="Example Company"
export KEY_EMAIL="[email protected]"
export KEY_CN=MyVPN
export KEY_NAME=MyVPN
export KEY_OU=MyVPN


  • 运行脚本,创建服务器证书:
cd /etc/openvpn/easy-rsa
source vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
cd keys
openvpn --genkey --secret ta.key
sudo cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/

客户端证书

  • 为了能让VPN客户端在运行时能够通过服务器认证,需要生成一个客户端证书.
  • 创建证书:
cd /etc/openvpn/easy-rsa/
source vars
./pkitool hostname
说明: 用需要连接到VPN服务器的客户端计算机名替换 hostname(不含双引号).
  • 拷贝前面生成的下述认证文件到客户端:
  • /etc/openvpn/easy-rsa/ca.crt
  • /etc/openvpn/easy-rsa/hostname.crt
  • /etc/openvpn/easy-rsa/hostname.key
说明: 请拷贝和你的客户端机器名("hostname")相符的文件.

服务器配置

  • 在OpenVPN服务器上修改 /etc/openvpn/server.conf
  • 可以通过示例文件修改:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gzip -d /etc/openvpn/server.conf.gz
  • 修改 etc/openvpn/server.conf:
sudo nano /etc/openvpn/server.conf
  • 根据实际情况更改下述选项:
local 172.18.100.101
dev tap0
server-bridge 172.18.100.101 255.255.255.0 172.18.100.105 172.18.100.200
push "route 172.18.100.1 255.255.255.0"
push "dhcp-option DNS 172.18.100.20"
push "dhcp-option DOMAIN example.com"
tls-auth ta.key 0 # This file is secret
user nobody
group nogroup
说明:
local: 指桥接接口的IP地址.
server-bridge: 使用桥接模式时需要配置. 172.18.100.101 255.255.255.0 这一部分是桥接接口的IP和掩码. 172.18.100.105 172.18.100.200 是要分配给客户端的IP地址池;
push: 为客户端指定需要添加的IP配置.
user and group: 配置OpenVPN后台服务所依赖的用户和组;
根据实际网络情况替换上述所有的IP地址和域名k.
  • 创建脚本,添加TAP接口到网桥.
  • 创建 /etc/openvpn/up.sh:
sudo nano /etc/openvpn/up.sh
添加以下内容:
#!/bin/sh
#
BR=$1
DEV=$2
MTU=$3
/sbin/ifconfig $DEV mtu $MTU promisc up
/usr/sbin/brctl addif $BR $DEV
  • 创建 /etc/openvpn/down.sh:
sudo nano /etc/openvpn/down.sh
添加以下内容:
#!/bin/sh
#
BR=$1
DEV=$2
#
/usr/sbin/brctl delif $BR $DEV
/sbin/ifconfig $DEV down
  • 设置脚本权限为可执行:
sudo chmod 755 /etc/openvpn/down.sh
sudo chmod 755 /etc/openvpn/up.sh
  • 重启 OpenVpn服务:
sudo /etc/init.d/openvpn restart

客户端配置

  • 复制示例文件:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn

  • 修改配置文件:
sudo nano /etc/openvpn/client.conf 
  • 参考下面的内容进行修改:
dev tap
remote vpn.mycompany.com 1194
cert hostname.crt
key hostname.key
tls-auth ta.key 1
说明: 用你VPN服务器的服务器名替换vpn.mycompany.com, 根据你使用的.crt和.key文件名(这两个文件名应该一致)替换"hostname".
  • 重启 OpenVpn服务:
sudo /etc/init.d/openvpn restart
  • 通过VPN服务器远程连接到LAN.

其它资源