Debian 10在5分钟内设置OpenVPN服务器

时间:2020-01-09 10:37:56  来源:igfitidea点击:

如何在Debian Linux版本10服务器上设置OpenVPN服务器,以保护我的浏览活动不受公共Wi-Fi等恶意软件的侵害?

说明OpenVPN是功能齐全的SSL VPN(虚拟专用网络)。
它使用SSL/TLS协议实现OSI第2层或第3层安全网络扩展。
它是一个开源软件,在GNU GPL下分发。

VPN使您可以安全地连接到不安全的公共网络,例如机场或酒店的wifi网络。
还需要VPN来访问您的公司或企业或家庭服务器资源。
您可以绕开该地理位置受阻的网站,并在线提高您的隐私或安全性。
本教程提供了在Debian Linux 10服务器上配置OpenVPN服务器的分步说明。

过程:Debian 10在5分钟内设置OpenVPN服务器

步骤如下:

步骤1更新系统

运行apt命令:

{Hyman@deb10:~ }$  sudo apt update 
{Hyman@deb10:~ }$  sudo apt upgrade

步骤2查找并记下您的IP地址

使用ip命令,如下所示:

{Hyman@deb10:~ }$  ip a 
{Hyman@deb10:~ }$  ip a show eth0

另一个选择是运行以下dig命令/主机命令以从Linux命令行中找到您的公共IP地址:

{Hyman@deb10:~ }$  dig +short myip.opendns.com @resolver1.opendns.com

或者

{Hyman@deb10:~ }$  dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print }'

有关IP地址的注释

大多数云服务器具有两种类型的IP地址:

  • "公共静态IP地址直接"分配给您的设备并从Internet路由。例如,Linode,Digital Ocean等可以为您提供直接的公共IP地址。
  • 直接连接到服务器的静态静态IP地址,而您的服务器位于具有公共IP地址的NAT后面。例如,AWS EC2/Lightsail为您提供了这种NAT公用IP地址。

该脚本将自动检测您的网络设置。
您所要做的就是在要求时提供正确的IP地址。

步骤3下载并运行debian10-vpn.sh脚本

我将使用wget命令:

{Hyman@deb10:~ }$  wget https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.sh -O debian10-vpn.sh

使用chmod命令设置权限

{Hyman@deb10:~ }$  chmod +x debian10-vpn.sh

可以使用诸如vim/vi之类的文本编辑器查看脚本:

{Hyman@deb10:~ }$  vi debian10-vpn.sh

运行debian10-vpn.sh安装OpenVPN服务器

现在您要做的就是:

{Hyman@deb10:~ }$  sudo ./debian10-vpn.sh

来自我的云服务器位于NAT之后的AWS EC2/Lightsail的示例会话:来自具有云服务器直接公共IPv4地址的Linode/DO服务器的示例会话:为避免出现问题,请始终选择DNS作为1.1.1.1或Google DNS。
这些是快速的DNS服务器,可以从Internet上的任何地方访问。
好的,这就是所有需要的脚本。
我们现在准备设置您的OpenVPN服务器。
您将能够在安装结束时生成客户端,如下所示:

如何在Debian 10上启动/停止/重启OpenVPN服务器?

{Hyman@deb10:~ }$  sudo systemctl stop openvpn@server  # <--- stop server
{Hyman@deb10:~ }$ sudo systemctl start openvpn@server  # <--- start server
{Hyman@deb10:~ }$ sudo systemctl restart openvpn@server  # <--- restart server
{Hyman@deb10:~ }$ sudo systemctl status openvpn@server  # <--- get server status

步骤4使用IOS/Android/Linux/Windows客户端连接OpenVPN服务器

在服务器上,您将找到一个名为~/linuxDesktop.ovpn的客户端配置文件。
您所要做的就是使用scp命令将此文件复制到本地桌面:

{Hyman@deb10:~ }$  scp Hyman@:~/linuxDesktop.ovpn .

或者

{Hyman@deb10:~ }$  scp root@:~/linuxDesktop.ovpn .

接下来,将此文件提供给您的OpenVPN客户端以进行连接:

  • 下载Apple iOS客户端
  • 抢安卓客户端
  • 访问Apple MacOS(OS X)客户端
  • Microsoft用户下载:Windows 8/10客户端

Linux桌面:OpenVPN客户端配置

首先,为您的桌面安装openvpn客户端,输入:

{Hyman@deb10:~ }$  sudo yum install openvpn

或者

{Hyman@deb10:~ }$  sudo apt install openvpn

接下来,如下复制linuxDesktop.ovpn:

{Hyman@deb10:~ }$  sudo cp linuxDesktop.ovpn /etc/openvpn/client/
'linuxDesktop.ovpn' -> '/etc/openvpn/client/linuxDesktop.ovpn'

从CLI测试连接性:

{Hyman@deb10:~ }$  sudo openvpn --client --config /etc/openvpn/client/linuxDesktop.ovpn

输出示例:

Sat Jul 13 21:56:07 2019 Unrecognized option or missing or extra parameter(s) in /etc/openvpn/client/linuxDesktop.ovpn:17: block-outside-dns (2.4.7)
Sat Jul 13 21:56:07 2019 OpenVPN 2.4.7 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Sat Jul 13 21:56:07 2019 library versions: OpenSSL 1.1.1c FIPS  28 May 2019, LZO 2.08
Sat Jul 13 21:56:07 2019 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
Sat Jul 13 21:56:07 2019 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
Sat Jul 13 21:56:07 2019 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
Sat Jul 13 21:56:07 2019 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
Sat Jul 13 21:56:07 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]172.105.51.63:1194
Sat Jul 13 21:56:07 2019 Socket Buffers: R=[212992->212992] S=[212992->212992]
Sat Jul 13 21:56:07 2019 UDP link local: (not bound)
Sat Jul 13 21:56:07 2019 UDP link remote: [AF_INET]172.105.51.63:1194
Sat Jul 13 21:56:07 2019 TLS: Initial packet from [AF_INET]172.105.51.63:1194, sid=0efbc848 675b12c1
Sat Jul 13 21:56:07 2019 VERIFY OK: depth=1, CN=cn_46pSC1RkaXtUzj8E
Sat Jul 13 21:56:07 2019 VERIFY KU OK
Sat Jul 13 21:56:07 2019 Validating certificate extended key usage
Sat Jul 13 21:56:07 2019 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
Sat Jul 13 21:56:07 2019 VERIFY EKU OK
Sat Jul 13 21:56:07 2019 VERIFY X509NAME OK: CN=server_CfvC2CLjZBl46fYN
Sat Jul 13 21:56:07 2019 VERIFY OK: depth=0, CN=server_CfvC2CLjZBl46fYN
Sat Jul 13 21:56:07 2019 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 256 bit EC, curve: prime256v1
Sat Jul 13 21:56:07 2019 [server_CfvC2CLjZBl46fYN] Peer Connection Initiated with [AF_INET]172.105.51.63:1194
Sat Jul 13 21:56:08 2019 SENT CONTROL [server_CfvC2CLjZBl46fYN]: 'PUSH_REQUEST' (status=1)
Sat Jul 13 21:56:08 2019 PUSH: Received control message: 'PUSH_REPLY,dhcp-option DNS 1.0.0.1,dhcp-option DNS 1.1.1.1,redirect-gateway def1 bypass-dhcp,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.8.0.2 255.255.255.0,peer-id 0,cipher AES-128-GCM'
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: timers and/or timeouts modified
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: --ifconfig/up options modified
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: route options modified
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: route-related options modified
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: peer-id set
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: adjusting link_mtu to 1624
Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: data channel crypto options modified
Sat Jul 13 21:56:08 2019 Outgoing Data Channel: Cipher 'AES-128-GCM' initialized with 128 bit key
Sat Jul 13 21:56:08 2019 Incoming Data Channel: Cipher 'AES-128-GCM' initialized with 128 bit key
Sat Jul 13 21:56:08 2019 ROUTE_GATEWAY 192.168.1.1/255.255.255.0 IFACE=wlp1s0 HWADDR=b4:6b:fc:32:7a:12
Sat Jul 13 21:56:08 2019 TUN/TAP device tun0 opened
Sat Jul 13 21:56:08 2019 TUN/TAP TX queue length set to 100
Sat Jul 13 21:56:08 2019 /sbin/ip link set dev tun0 up mtu 1500
Sat Jul 13 21:56:08 2019 /sbin/ip addr add dev tun0 10.8.0.2/24 broadcast 10.8.0.255
Sat Jul 13 21:56:08 2019 /sbin/ip route add 172.105.51.63/32 via 192.168.1.1
Sat Jul 13 21:56:08 2019 /sbin/ip route add 0.0.0.0/1 via 10.8.0.1
Sat Jul 13 21:56:08 2019 /sbin/ip route add 128.0.0.0/1 via 10.8.0.1
Sat Jul 13 21:56:08 2019 Initialization Sequence Completed

使用openvpn脚本/服务重新启动计算机时,您的Linux系统将自动连接:

{Hyman@deb10:~ }$  sudo systemctl start openvpn@client  #

步骤5-验证/测试连接

从Linux桌面连接到OpenVPN服务器后,执行以下命令:

{Hyman@deb10:~ }$  ping 10.8.0.1  #Ping to the OpenVPN server gateway
{Hyman@deb10:~ }$  ip route  #Make sure routing setup working
{Hyman@deb10:~ }$  dig TXT +short o-o.myaddr.l.google.com @ns1.google.com  #Must return public IP address of OpenVPN server
172.105.51.63

第6步-添加/删除/撤消VPN用户

现在已经安装并正在运行OpenVPN,是时候添加新用户或删除现有VPN用户了。
通过再次运行debian10-vpn.sh脚本,我们可以顺利完成此操作。
在您的OpenVPN Debian Linux v10服务器上执行以下命令:

ssh Hyman@my-debian-10-server
sudo ./debian10-vpn.sh

Gif.01:添加或删除OpenVPN用户/客户端

有关解决OpenVPN服务器和客户端问题的说明

检查OpenVPN服务器是否存在错误:

{Hyman@deb10:~ }$  journalctl --identifier ovpn-server

服务器上的防火墙规则设置正确吗?
使用iptables命令和sysctl命令命令来验证服务器上的NAT规则设置:

{Hyman@deb10:~ }$  sudo iptables -t nat -L -n -v 
{Hyman@deb10:~ }$  sysctl net.ipv4.ip_forward

如果未从/etc/rc.local插入规则,则将其插入

{Hyman@deb10:~ }$  sudo sh /etc/rc.local 
{Hyman@deb10:~ }$  sudo sysctl -w net.ipv4.ip_forward=1

OpenVPN服务器是否正在运行并且端口是否打开?
使用ss命令或netstat命令以及pidof命令/ps命令:

{Hyman@deb10:~ }$  netstat -tulpn | grep :1194  ## 1194 is the openvpn server port ##
{Hyman@deb10:~ }$  ss -tulpn | grep :1194  ## 1194 is the openvpn server port ##
{Hyman@deb10:~ }$  ps aux | grep openvpn  ## is the openvpn server running? ##
{Hyman@deb10:~ }$  ps -C openvpn  ## is the openvpn server running? ##
{Hyman@deb10:~ }$  pidof openvpn  ## find the openvpn server PID ##

如果未运行,请重新启动OpenVPN服务器:

{Hyman@deb10:~ }$  sudo systemctl restart openvpn@server

注意错误:

{Hyman@deb10:~ }$  sudo systemctl status openvpn@server

Linux桌面客户端可以连接到OpenVPN服务器计算机吗?
首先,您需要运行一个简单的测试,以查看OpenVPN服务器端口(UDP 1194)是否接受连接:

{Hyman@deb10:~ }$  nc -vu 1194 
`Connection to 1194 port [udp/openvpn] succeeded!`

如果未连接,则意味着Linux桌面防火墙或您的路由器正在阻止对服务器的访问。
确保客户端和服务器使用相同的协议和端口,例如UDP端口1194。