网站搜索

Debian 7 上的 OpenVPN 服务器和客户端安装和配置


本文详细介绍了如何使用 Debian LinuxOpenVPN 上获取 IPv6 连接。该过程已在 KVM VPS 上的 Debian 7 上进行了测试,并以 IPv6 连接作为服务器,并在 Debian 7 桌面上进行了测试。这些命令将以 root 身份运行。

什么是 OpenVPN?

OpenVPN 是一种 VPN 程序,它使用 SSL/TLS 创建安全、加密的 VPN 连接,以路由您的互联网流量,从而防止窥探。 Open VPN 具有很强的透明穿越防火墙的能力。事实上,如果情况需要,您可以在与 HTTPS (443) 相同的 TCP 端口上运行它,使流量无法区分,因此几乎不可能被阻止。

OpenVPN 可以使用多种方法(例如预共享密钥、证书或用户名/密码)来让客户端向服务器进行身份验证。 OpenVPN 使用 OpenSSL 协议并实现许多安全和控制功能,例如质询响应身份验证、单点登录功能、负载平衡和故障转移功能以及多守护程序支持。

为什么使用 OpenVPN?

想想安全通信——想想 OpenVPN。如果您不希望任何人窥探您的互联网流量,请使用 OpenVPN 通过高度加密的安全隧道路由您的所有流量。

当连接到机场和其他地方的公共 WIFI 网络时,这一点尤其重要。您永远无法确定谁在窥探您的流量。您可以通过自己的 OpenVPN 服务器引导流量以防止窥探。

如果您位于定期监控所有流量并随意阻止网站的任何国家/地区,您可以使用基于 TCP 端口 443 的 OpenVPN,使其与 HTTPS 流量无法区分。您甚至可以将 OpenVPN 与其他安全策略结合起来,例如通过 SSL 隧道传输 OpenVPN 流量,以击败可能能够识别 OpenVPN 签名的深度数据包检查技术。

系统要求

OpenVPN 的运行要求非常低。具有64 MB RAM1 GB HDD空间的系统足以运行OpenVPN。 OpenVPN 几乎可以在所有主流操作系统上运行。

Debian 7 上 OpenVPN 的安装和配置

在主服务器上安装 OpenVPN

运行以下命令安装 OpenVPN。

apt-get install openvpn

默认情况下,easy-rsa 脚本安装在“/usr/share/easy-rsa/”目录下。因此,我们需要将这些脚本复制到所需的位置,即 /root/easy-rsa

mkdir /root/easy-rsa
cp -prv /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/easy-rsa

生成 CA 证书和 CA 密钥

打开文件“vars”并进行以下更改,但在进行更改之前,我建议您备份原始文件。

cp vars{,.orig}

使用文本编辑器设置 easy-rsa 的默认值。例如。

KEY_SIZE=4096
KEY_COUNTRY="IN"
KEY_PROVINCE="UP"
KEY_CITY="Noida"
KEY_ORG="Home"
KEY_EMAIL="[email "

在这里,我使用 4096 位密钥。您可以根据需要使用 1024204840968192 位密钥。

通过运行命令导出默认值。

source ./vars

清理之前生成的所有证书。

./clean-all

接下来,运行以下命令生成CA证书和CA密钥。

./build-ca

通过运行命令生成服务器证书。将“服务器名称”替换为您的服务器名称。

./build-key-server server-name

生成 Diffie Hellman PEM 证书。

./build-dh

生成客户端证书。将“客户名称”替换为您的客户名称。

./build-key client-name

生成 HMAC 代码。

openvpn --genkey --secret /root/easy-rsa/keys/ta.key

将证书复制到客户端和服务器计算机,如下所示。

  1. 确保客户端和服务器上都存在ca.crt
  2. ca.key 密钥应位于客户端上。
  3. 服务器需要server.crtdh4096.pemserver.keyta.key
  4. client.crtclient.keyta.key 应位于客户端上。

要在服务器上设置密钥和证书,请运行命令。

mkdir -p /etc/openvpn/certs
cp -pv /root/easy-rsa/keys/{ca.{crt,key},server-name.{crt,key},ta.key,dh4096.pem} /etc/openvpn/certs/

配置 OpenVPN 服务器

现在您需要配置 OpenVPN 服务器。打开文件“/etc/openvpn/server.conf”。请按照如下所述进行更改。

script security 3 system
port 1194
proto udp
dev tap

ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server-name.crt
key /etc/openvpn/certs/server-name.key
dh /etc/openvpn/certs/dh4096.pem
tls-auth /etc/openvpn/certs/ta.key 0

server 192.168.88.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 1800 4000

cipher DES-EDE3-CBC # Triple-DES
comp-lzo

max-clients 10

user nobody
group nogroup

persist-key
persist-tun

#log openvpn.log
#status openvpn-status.log
verb 5
mute 20

在服务器上启用 IP 转发。

echo 1 > /proc/sys/net/ipv4/ip_forward

运行以下命令将 OpenVPN 设置为开机启动。

update-rc.d -f openvpn defaults

启动 OpenVPN 服务。

service openvpn restart

在客户端安装 OpenVPN

运行以下命令在客户端计算机上安装 OpenVPN。

apt-get install openvpn

使用文本编辑器,在客户端上的“/etc/openvpn/client.conf”中设置 OpenVPN 客户端配置。配置示例如下:

script security 3 system
client
remote vpn_server_ip
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/client.crt
key /etc/openvpn/certs/client.key
cipher DES-EDE3-CBC
comp-lzo yes
dev tap
proto udp
tls-auth /etc/openvpn/certs/ta.key 1
nobind
auth-nocache
persist-key
persist-tun
user nobody
group nogroup

运行以下命令将 OpenVPN 设置为开机启动。

update-rc.d -f openvpn defaults

在客户端启动OpenVPN服务。

service openvpn restart

一旦您对 OpenVPN 在 IPv4 上运行良好感到满意,以下是如何让 IPv6 在 OpenVPN 上运行。

让 IPv6 与服务器上的 OpenVPN 配合使用

将以下行添加到服务器配置“/etc/openvpn/server.conf”文件的末尾。

client-connect /etc/openvpn/client-connect.sh
client-disconnect /etc/openvpn/client-disconnect.sh

每次客户端连接/断开连接时,这两个脚本都会构建/销毁 IPv6 隧道。

这是client-connect.sh的内容。

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
ifconfig $dev up
ifconfig $dev add ${BASERANGE}:1001::1/64
ip -6 neigh add proxy 2a00:dd80:003d:000c:1001::2 dev eth0
exit 0

我的主机为我分配 2a00:dd80:003d:000c::/64 块中的 IPV6 地址。因此,我使用
2a00:dd80:003d:000c 作为基准范围。根据主机分配给您的值修改此值。

每次客户端连接到 OpenVPN 时,此脚本都会将地址 2a00:dd80:003d:000c:1001::1 分配为 tap0< 的 IPV6 地址/strong> 服务器接口。

最后一行为我们的隧道设置邻居发现。我已添加客户端 tap0 连接的 IPv6 地址作为代理地址。

这是client-disconnect.sh的内容。

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
/sbin/ip -6 addr del ${BASERANGE}::1/64 dev $dev
exit 0

当客户端断开连接时,这只会删除服务器的 IPv6 隧道地址。根据需要修改 BASERANGE 的值。

使脚本可执行。

chmod 700 /etc/openvpn/client-connect.sh
chmod 700 /etc/openvpn/client-disconnect.sh

将以下条目添加到“/etc/rc.local”(您还可以在 /etc/sysctl.conf 中修改相应的 sysctls)。

echo 1 >/proc/sys/net/ipv6/conf/all/proxy_ndp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
/etc/init.d/firewall stop && /etc/init.d/firewall start

这些条目激活邻居发现和转发。我还添加了防火墙。

创建“/etc/init.d/firewall”并放入以下内容。

#!/bin/sh
description: Firewall
IPT=/sbin/iptables
IPT6=/sbin/ip6tables
case "$1" in
start)
$IPT -F INPUT
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i eth0 -p icmp -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
$IPT -A INPUT -i tap+ -j ACCEPT
$IPT -A FORWARD -i tap+ -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -F POSTROUTING
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
$IPT -A INPUT -i eth0 -j DROP
$IPT6 -F INPUT
$IPT6 -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT6 -A INPUT -i eth0 -p icmpv6 -j ACCEPT
$IPT6 -A FORWARD -s 2a00:dd80:003d:000c::/64 -i tap0 -o eth0 -j ACCEPT
$IPT6 -A INPUT -i eth0 -j DROP
exit 0
;;
stop)
$IPT -F
$IPT6 -F
exit 0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac

运行‘/etc/rc.local‘并启动防火墙。

sh /etc/rc.local

这样就完成了服务器端的修改。

让 IPv6 与客户端上的 OpenVPN 配合使用

添加以下内容作为客户端配置文件“/etc/openvpn/client.conf”的最后几行。

create the ipv6 tunnel
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
need this so when the client disconnects it tells the server
explicit-exit-notify

每次客户端连接到 OpenVPN 服务器或从 OpenVPN 服务器断开连接时,up 和 down 脚本都会构建/销毁客户端 tap0 连接的 IPV6 客户端端点。

这是up.sh的内容。

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
ifconfig $dev up
ifconfig $dev add ${IPV6BASE}:1001::2/64
ip -6 route add default via ${IPV6BASE}:1001::1
exit 0

该脚本将 IPV6 地址 2a00:dd80:3d:c:1001::2 分配为客户端 IPV6 地址,并设置通过服务器的默认 IPV6 路由。

将 IPV6BASE 修改为与服务器配置中的 BASERANGE 相同。

这是down.sh的内容。

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
/sbin/ip -6 addr del ${IPV6BASE}::2/64 dev $dev
/sbin/ip link set dev $dev down
/sbin/ip route del ::/0 via ${IPV6BASE}::1
exit 0

这只是删除客户端的 IPV6 地址,并在客户端与服务器断开连接时拆除 IPV6 路由。

将 IPV6BASE 修改为与服务器配置中的 BASERANGE 相同,并使脚本可执行。

chmod 700 /etc/openvpn/up.sh
chmod 700 /etc/openvpn/down.sh

(可选)修改“/etc/resolv.conf”并添加 Google 的 IPV6 名称服务器以进行 DNS 解析。

nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

在服务器上重新启动 openvpn,然后从客户端连接到它。您应该已连接。访问 test-ipv6.com 查看您通过 OpenVPN 的 IPV6 连接是否正常工作。

参考链接

OpenVPN 主页

来源:斯塔夫洛夫斯基