Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用 - 码农教程


本站和网页 http://www.manongjc.com/detail/6-eqkmpihxsfrrauu.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用 - 码农教程
首页
JAVA
PHP
HTML
CSS
CSS3
JAVASCRIPT
Sass
MYSQL
SQL
PL/SQL
SQLITE
REDIS
首页 > 编程笔记 > 服务器 > Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用
Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用
时间:2019-06-11
本文章向大家介绍Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用,主要包括Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
说明:启动时注意用户权限,比如root用户启动。
Ubuntu:
服务器环境:Ubuntu 16.04 64位系统
内网IP:10.143.80.116
外网IP:203.195.1.2
OpenVPN版本:OpenVPN 2.3.10
OpenVPN:
一般以系统源安装的版本为准,比如现在安装的基本以2.3.10为主,可能以后会随着源升级而更新到最新版本。
可以单独上官网(需要翻出去)下载指定版本的来安装,但前提注意系统安装的依赖。
搭建过程:
1、安装前准备
# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度sudo apt-get install openssl libssl-devsudo apt-get install lzop
2、安装及配置OpenVPN和easy-rsa
# 安装openvpn和easy-rsasudo apt-get install openvpnsudo apt-get install easy-rsa
# 修改vars文件 sudo sucd /usr/share/easy-rsa/ vim vars
# 修改注册信息,比如公司地址、公司名称、部门名称等。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shandong"
export KEY_CITY="Qingdao"
export KEY_ORG="MyOrganization"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
# 初始化环境变量
source vars
# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/keys目录里
./clean-all
# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca
# 为服务端生成证书和私钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key-server server
# 每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
# 为客户端生成证书和私钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
./build-key client2
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh
# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key
3、创建服务器端配置文件
# 在openvpn的配置目录下新建一个keys目录
mkdir /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里的配置参数
grep '^[^#;]' /etc/openvpn/server.conf
# 编辑server.conf
vim /etc/openvpn/server.conf
port 1194
# 改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议
proto tcp
dev tun # 路由模式,桥接模式用dev tap
# 路径前面加keys,全路径为/etc/openvpn/keys/ca.crt
ca keys/ca.crt
cert keys/server.crt
key keys/server.key # This file should be kept secret
dh keys/dh2048.pem
# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 10.8.0.0 255.255.255.0 # 路由模式,桥接模式用server-bridge
ifconfig-pool-persist ipp.txt
# 10.0.0.0/8是我这台VPN服务器所在的内网的网段,读者应该根据自身实际情况进行修改
push "route 10.0.0.0 255.0.0.0"
# 可以让客户端之间相互访问直接通过openvpn程序转发,根据需要设置
client-to-client
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
# OpenVPN的状态日志,默认为/etc/openvpn/openvpn-status.log
status openvpn-status.log
# OpenVPN的运行日志,默认为/etc/openvpn/openvpn.log
log-append openvpn.log
# 改成verb 5可以多查看一些调试信息
verb 5
4、配置内核和防火墙,启动服务
# 开启路由转发功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.confsed -i '/net.ipv4.ip_forward/s/#//' /etc/sysctl.conf
sysctl -p
# 配置防火墙,别忘记保存
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 MASQUERADEmkdir /etc/iptables
iptables-save > /etc/iptables/iptables.conf# 关闭ufw防火墙,改成iptables,这一步按需要设置,比较ufw在Ubuntu默认关闭的。iptables和ufw任选一个即可。ufw disable
# 启动openvpn并设置为开机启动
systemctl start openvpn@server systemctl enable openvpn@server # 在systemd单元文件的后面,我们通过指定特定的配置文件名来作为一个实例变量来开启OpenVPN服务,我们的配置文件名称为/etc/openvpn/server.conf,所以我们在systemd单元文件的后面添加@server来开启OpenVPN服务
5、创建客户端配置文件client.ovpn(用于客户端软件使用)
# 复制一份client.conf模板命名为client.ovpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.ovpn
# 编辑client.ovpn
vim /etc/openvpn/client.ovpn
client
dev tun # 路由模式
# 改为tcp
proto tcp
# OpenVPN服务器的外网IP和端口
remote 203.195.1.2 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的证书
cert client1.crt
# client1的密钥
key client1.key
ns-cert-type server
# 去掉前面的注释
tls-auth ta.key 1
comp-lzo
verb 5
6、配置client
安装软件,可以和服务器安装的保持一致:
# 安装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
在服务器上下载回需要的文件
sz /etc/openvpn/client.ovpn /etc/openvpn/keys/ca.crt /etc/openvpn/keys/client1.crt /etc/openvpn/keys/client1.key /etc/openvpn/keys/ta.key
将OpenVPN服务器上的client.ovpn、ca.crt、client1.crt、client1.key、ta.key上传到Linux客户端安装目录下的/etc/openvpn文件夹(使用rz命令)
[root@linux64 openvpn]# pwd
/etc/openvpn
[root@linux64 openvpn]# ls
ca.crt client1.crt client1.key client.ovpn conf ta.key
启动客户端
openvpn --daemon --cd /etc/openvpn --config client.ovpn --log-append /var/log/openvpn.log &
上面是以守护进程启动的,可以把上面脚本放在/etc/rc.local实现开机启动。或者使用以服务的形式启动,如果想清晰明了,建议放在启动脚本。
【. . . . . .本博客仅作个人生活、工作、学习等的日常记录。说明: (1) 内容有参考其他博主、网页等,有因“懒”直接粘贴来,会备注出处。若遇雷同,或忘备注,并无故意抄袭之意,请诸“原主”谅解,很感谢您的辛勤"笔记"可供本人参考学习。 (2) 如遇同行,有参考学习者,因个人学识有限,不保证所写内容完全正确。您对本博文有任何的意见或建议,欢迎留言,感谢指正。 (3) 若您认为本主的全博客还不错,可以点击关注,便于互相学习。 (4) 感谢您的阅读,希望对您有一定的帮助。欢迎转载或分享,但请注明出处,谢谢。. . . . . .】
原文地址:https://www.cnblogs.com/hls91/p/11004580.html
随机文章
How To Implement The Decision Tree Algorithm From Scratch In Python (从零开始在Python中实现决策树算法)
『教程』微信小程序webview的使用
How to Save an ARIMA Time Series Forecasting Model in Python (如何在Python中保存ARIMA时间序列预测模型)
Decision Trees in Apache Spark (Apache Spark中的决策树)
Feature Selection For Machine Learning in Python (Python机器学习中的特征选择)
简约的JAVA版本MapReduce和日常No.25
根据职位说明使用机器学习来检索相关简历
微信小游戏初体验
一行Spark代码的诞生记(深度剖析Spark架构)
Ray:AI的分布式系统
Spring Boot 中使用 MongoDB 增删改查
来人啊给我炸了那个Java虚拟机No.46
机器学习虾扯淡之Logistic回归No.44
大数据计数原理1+0=1这你都不会算(一)No.47
本站知识点必读
JavaScript 教程
JavaScript 编辑工具
JavaScript 与HTML
JavaScript 与Java
JavaScript 数据结构
JavaScript 基本数据类型
JavaScript 特殊数据类型
JavaScript 运算符
JavaScript typeof 运算符
JavaScript 表达式
JavaScript 类型转换
JavaScript 基本语法
JavaScript 注释
Javascript 基本处理流程
Javascript 选择结构
Javascript if 语句
Javascript if 语句的嵌套
Javascript switch 语句
Javascript 循环结构
Javascript 循环结构实例
Javascript 跳转语句
Javascript 控制语句总结
Javascript 函数介绍
Javascript 函数的定义
Javascript 函数调用
Javascript 几种特殊的函数
JavaScript 内置函数简介
Javascript eval() 函数
Javascript isFinite() 函数
Javascript isNaN() 函数
parseInt() 与 parseFloat()
escape() 与 unescape()
Javascript 字符串介绍
Javascript length属性
javascript 字符串函数
Javascript 日期对象简介
Javascript 日期对象用途
Date 对象属性和方法
Javascript 数组是什么
Javascript 创建数组
Javascript 数组赋值与取值
Javascript 数组属性和方法
本网站教程列表:
JAVA教程
Java实例
JSP教程
Apache POI教程
EJB 教程
JDBC 教程
Spring 教程
PHP教程
Codeigniter教程
MYSQL 教程
Mysql 基础教程
SQL 教程
PL/SQL教程
SQLite 教程
Redis 教程
HTML 教程
CSS教程
CSS3 教程
CSS 参考手册
Javascript 教程
Bootstrap 教程
Sass 教程
最近更新
appium教程_2.概念加深
[javascript] cdn模式下vue和vue-router实现路由
(干货)前端实现导出excel的功能
完美解决JavaScript的深浅拷贝
来,我们在重新说下,线程状态?
[不定时一题]LeetCode两数相加
[不定时一题]Leetcode两数之和
深入浅出mongodb(一)
深入浅出mongodb(二)
算法——快速排序
算法——二分查找算法
第一篇——Ubuntu 安装 Elasticsearch
Ubuntu安装Redis(手动编译)
第五节:Activiti6.0——流程定义相关API
第四节:Activiti6.0——使用zip、bpmn代码生成流程图的资源部署以及资源的查询
Copyright (C) 2015 www.manongjc.com, All Rights Reserved. 版权所有 码农教程
备案号:鄂ICP备2022014784号-1