如何在Ubuntu 系统中搭建 OpenVPN 服务

这篇具有很好参考价值的文章主要介绍了如何在Ubuntu 系统中搭建 OpenVPN 服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先说明一下,本机环境具体如下:

操作系统:Ubuntu-18.04-LTS
内网 IP : 192.168.1.110
外网 IP : 14.153.76.90
OpenVPN 版本:2.4.4


一、安装 OpenVPN
二、创建证书和秘钥
  1. 修改并初始化环境变量
  2. 创建秘钥
    三、创建服务器端配置文件(server.conf)
    四、配置内核和防火墙,启动服务端
    五、创建客户端配置文件 client.ovpn (用于客户端软件使用)
    六、在路由器上创建虚拟服务器
    七、启动客户端

一、安装 OpenVPN

首先安装一些依赖,安装openssl和lzo,lzo用于压缩通讯数据加快传输速度

sudo apt-get install openssl libssl-dev
sudo apt-get install lzop

安装 OpenVPN 和 easy-rsa

sudo apt-get install openvpn
sudo apt-get install easy-rsa

二、创建证书和秘钥

安装完 easy-rsa 之后我们就可以开始创建 OpenVPN 服务所需要的秘钥了。

  1. 修改并初始化环境变量
sudo su
cd /usr/share/easy-rsa/
vim vars

# 修改注册信息,比如公司地址、公司名称、部门名称等。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="GuangDong"
export KEY_CITY="ShenZhen"
export KEY_ORG="XJXH"
export KEY_EMAIL="rock@xjxh.io"
export KEY_OU="FuckItWhatever"
export KEY_NAME="EasyRSA"

# 使环境变量生效
source ./vars

# 添加 openssl 配置文档
cp openssl-1.0.0.cnf openssl.cnf

2. 创建秘钥

# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/keys目录里
./clean-all

# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca

# 为服务端生成证书和私钥, --batch 表示保持默认设置,无须回车确认
./build-key-server --batch server

# 为客户端生成证书和私钥
./build-key --batch client

# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh

# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key

三、创建服务器端配置文件(server.conf)

首先在 openvpn 的配置目录下新建一个 keys 目录

sudo mkdir -p /etc/openvpn/keys

然后,将需要用到的 openvpn 证书和密钥复制一份到刚创建好的 keys 目录中

cp /usr/share/easy-rsa/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/

复制一份服务器端配置文件模板 server.conf 到 /etc/openvpn/

gzip -d /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/

编辑 server.conf

# 服务端口
port 1194

# 使用的传输协议
proto tcp
# 路由模式,桥接模式用dev tap
dev tun

# 证书路径
ca keys/ca.crt
cert keys/server.crt
key keys/server.key

dh keys/dh2048.pem

# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 10.8.0.0 255.255.255.0

ifconfig-pool-persist /var/log/openvpn/ipp.txt

# 192.168.1.0 是我的 OpenVPN 服务器所在在局域网的网段
# 如果你的局域网不是这个,那这里需要修改成你的网段
push "route 192.168.1.0 255.255.255.0"
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn

# 这里如果设置了 tls-auth 则客户端也要设置,而且要跟服务器端对应,服务端为0,客户端则为 1
# 我这里注释掉了,因为我客户端没有使用 tls-auth
;tls-auth keys/ta.key 0 # This file is secret
;key-direction 0

# clients we want to allow.
max-clients 100

persist-key
persist-tun

status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log

verb 3

# 如果上面配置了传输方式为 TCP, 则此处应该注释掉,否则会产生冲突
;explicit-exit-notify 1

# 这里配置使用用户名和密码登录的支持,可以取代使用秘钥和证书登录
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
# 这里非常重要,如果你启用了该选项,你就只需要通过用户名和密码登录了
# 但是如果你注释了该选项,那你必须使用 用户名 + 密码 + 证书 才能登录成功,缺一不可。
;verify-client-cert none
username-as-common-name
script-security 3

如果你配置了使用用户名和密码登录,那么你需要创建登录验证脚本 vim /etc/openvpn/checkpsw.sh

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/etc/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file "${PASSFILE}" for reading." >> ${LOG_FILE}
  exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username="${username}", password="${password}"." >> ${LOG_FILE}
  exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username="${username}"." >> ${LOG_FILE}
  exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username="${username}", password="${password}"." >> ${LOG_FILE}
exit 1

然后你还需要创建一个密码本文件 vim /etc/openvpn/psw-file,每一行一个用户,用户名和密码之间用空格隔开:

user1 pass1
user2 pass2
user3 pass3

至此服务端配置完成。

四、配置内核和防火墙,启动服务端
第一步,开启路由转发功能

sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sed -i '/net.ipv4.ip_forward/s/#//' /etc/sysctl.conf
sysctl -p

第二步,配置 iptables

iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

然后我们保存 iptables 设置,并在开机自动加载配置,初始化。这里可以通过 iptables-persistent 来快速实现

sudo apt-get install iptables-persistent

保存规则

sudo service netfilter-persistent save
下次开机启动的时候就可以看到 iptables 规则已经自动加载

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:openvpn /* openvpn */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

关闭 ufw 防火墙

ufw disable

第三步,启动 OpenVPN 服务

/etc/init.d/openvpn start
# 设置开机启动
systemctl enable openvpn@server

五、创建客户端配置文件 client.ovpn (用于客户端软件使用)

首先复制一份 client.conf 模板命名为 client.ovpn

mkdir ~/openvpn-client
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-client/client.ovpn

然后修改 client.ovpn, vim /etc/openvpn/client.ovpn

client
# 这里设置跟服务端一样
dev tun
proto tcp

# OpenVPN 服务端 IP 和端口
remote 14.153.76.90 1194

resolv-retry infinite

nobind

persist-key
persist-tun

# 这里设置证书和秘钥
ca ca.crt
cert client.crt
key client.key

remote-cert-tls server

# 如果服务端使用 tls-auth, 则这里也要启用
;tls-auth ta.key 1

comp-lzo

verb 3

# 用来存放用户名和密码的文件路径,这样在连接的时候就不需要手动输入用户名密码了
auth-user-pass pass.txt

修改好客户端配置文档之后,接下来需要把证书文件也一起拷贝到 ~/openvpn-client 文件夹中:

cp /ect/openvpn/keys/ca.crt ~/openvpn-client
cp /usr/share/easy-rsa/keys/client.crt ~/openvpn-client
cp /usr/share/easy-rsa/keys/client.key ~/openvpn-client

然后还需要在 openvpn-client 目录中新建 pass.txt 文件,第一行写用户名,第二行写密码:

user1
pass1

七、启动客户端
启动客户端很简单,只需要把上一步我们创建的 openvpn-client 文件夹拷贝到客户端机器,然后执行下面的命令:

cd openvpn-client
sudo openvpn --config client.ovpn

如果你看到输出类似下面的日志,则说明你已经成功连接上了 VPN, 你可以直接访问 VPN 服务器所在的网络了。文章来源地址https://www.toymoban.com/news/detail-666144.html

Sat Apr 20 14:30:34 2019 /sbin/ip link set dev tun0 up mtu 1500
Sat Apr 20 14:30:34 2019 /sbin/ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5
Sat Apr 20 14:30:34 2019 /sbin/ip route add 192.168.0.0/24 via 10.8.0.5
Sat Apr 20 14:30:34 2019 /sbin/ip route add 10.8.0.1/32 via 10.8.0.5
Sat Apr 20 14:30:34 2019 Initialization Sequence Completed

到了这里,关于如何在Ubuntu 系统中搭建 OpenVPN 服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Ubuntu上通过Docker部署OpenVPN服务器

    在这篇博客中,我们将探讨如何在Ubuntu服务器上通过Docker容器化技术来部署OpenVPN服务器。下面是逐步进行的指南,适用于初学者和中级用户。 前提条件 : 一个运行Ubuntu的服务器 Docker已安装在服务器上 步骤1: 安装Docker 首先,确保你的Ubuntu服务器上已经安装了Docker。 步骤2: 创

    2024年02月05日
    浏览(63)
  • Linux如何在Ubuntu系统服务器上安装 Jenkins?【详细教程】

    1. 更新 Ubuntu 软件包列表 ``` sudo apt-get update ``` 2. 安装 Java 运行环境 ``` sudo apt-get install openjdk-8-jdk ``` 3. 导入 Jenkins GPG 密钥 ``` wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - ``` 4. 添加 Jenkins 软件包仓库 ``` sudo sh -c \\\'echo deb https://pkg.jenkins.io/debian-stable binary/ /

    2023年04月09日
    浏览(60)
  • 【运维】Ubuntu,如何在Ubuntu系统中编译和安装OpenCV, apt安装OpenCV

    在C++开发中,使用OpenCV是一个常见的需求。您可以选择使用conan构建包,或者直接将OpenCV安装到系统中。官方文档提供了详细的教程,可以在这里找到:OpenCV官方文档 然而,在这里我们将演示一种自己的安装方法,逐步进行操作: 步骤1:更新系统 在安装任何软件之前,请确

    2024年01月23日
    浏览(56)
  • Ubuntu Server 20.04 系统安装(六):Linux搭建frp服务,实现内网穿透服务,实现外网到内网的在线访问 Ubuntu 设置frp开机自启动

    frp 是什么? frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

    2024年02月13日
    浏览(49)
  • 如何在Linux Ubuntu系统安装Nginx服务并实现无公网IP远程连接

    在开发人员的工作中,公网远程访问内网是其必备的技术需求之一。对于运维人员和开发者来说,能够通过公网远程访问内部的服务和应用,能够极大地提升工作效率和便利性。本文将介绍如何利用 Ubuntu操作系统、Docker容器技术以及cpolar内网穿透工具来实现公网远程访问本地

    2024年03月22日
    浏览(40)
  • Ubuntu Server 20.04 系统安装(六):Linux搭建frp服务,实现内网穿透服务,实现外网到内网的在线访问

    frp 是什么? frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

    2024年01月17日
    浏览(53)
  • 华纳云:ubuntu下如何搭建nfs服务

    在Ubuntu下搭建NFS(Network File System)服务,可以实现网络文件共享。以下是在Ubuntu上搭建NFS服务的步骤: 安装NFS服务器和客户端软件: 打开终端,并使用以下命令安装NFS服务器和客户端软件: sudo apt-get update sudo apt-get install nfs-kernel-server nfs-common 配置NFS服务器: 编辑NFS服务器配

    2024年02月15日
    浏览(34)
  • 云计算课程-Ubuntu系统搭建jenkins服务

    博客内容是云计算课程搭建DevOps流水线的步骤之一,即搭建jenkins服务 可以单独运用于jenkins服务的搭建 也可以作为搭建dev-ops中jenkins-server主机的步骤之一 使用的实验环境为:Ubuntu20.04.5、jenkins 在此进行记录 云计算课程第四次实验-搭建DevOps流水线: 云计算课程第四次实验-搭

    2024年04月27日
    浏览(36)
  • 如何使用Pritunl搭建OpenVPN服务器,实现远程连接【内网穿透】

    Pritunl是一款免费开源的 VPN 平台软件(但使用的不是标准的开源许可证,用户受到很多限制)。这是一种简单有效的VPN方式,一方面能有一个相对简单的途径,易于初级用户迅速搭建 VPN 服务;另一方面有能抵御墙的干扰,提供稳定有效的代理服务。Pritunl采用 OpenVPN 代理方式

    2024年02月08日
    浏览(63)
  • Linux环境(Ubuntu)上搭建MQTT服务器(EMQX )

    目录 概述 1 认识EMQX 1.1 EMQX 简介 1.2 EMQX 版本类型 2 Ubuntu搭建EMQX 平台 2.1 下载和安装 2.1.1 下载 2.1.2 安装 2.2 查看运行端口 3 运行Dashboard 管理控制台 3.1 查看Ubuntu上的防火墙 3.2 运行Dashboard 管理控制台 本文主要介绍EMQX 的一些内容,终端介绍如何在Ubuntu上安装EMQX,并可以在第三

    2024年04月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包