惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Webroot Blog
Webroot Blog
腾讯CDC
The Last Watchdog
The Last Watchdog
博客园 - 司徒正美
H
Hacker News: Front Page
I
InfoQ
A
Arctic Wolf
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Heimdal Security Blog
L
LINUX DO - 最新话题
T
Threat Research - Cisco Blogs
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Security Latest
Security Latest
D
DataBreaches.Net
C
Check Point Blog
J
Java Code Geeks
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
L
Lohrmann on Cybersecurity
雷峰网
雷峰网
Vercel News
Vercel News
WordPress大学
WordPress大学
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Spread Privacy
Spread Privacy
Forbes - Security
Forbes - Security
阮一峰的网络日志
阮一峰的网络日志
Hacker News: Ask HN
Hacker News: Ask HN
大猫的无限游戏
大猫的无限游戏
I
Intezer
N
News and Events Feed by Topic
小众软件
小众软件
B
Blog RSS Feed
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
美团技术团队
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小 shell | centos 初始化 loki (二) 部署 loki (一) 简介 prometheus (六) Alertmanager prometheus (五) 记录规则与告警规则 prometheus (四) 黑盒监控 prometheus (三) 服务发现 prometheus (二) 静态配置 prometheus (一) 简介及部署 traefik (四) TraefikService 服务 traefik (三) Middleware 中间件 traefik (二) ingressRoute 路由 traefik (一) 简介、部署和配置 kubernetes | Gateway API 简介及部署 linux | dns 配置文件中 search 和 options ndots 详解 kubernetes | command args 和 dockerfile 中的 ENTRYPOINT CMD kubernetes | statefulset 控制器详解 docker | dockerfile 最佳实践 docker | dockerfile 指令详解 linux | kill 命令详解以及 linux 中的信号 troubleshooting | elasticsearch 安装插件报错 shell | if 条件判断 docker | 下载外网镜像的几种方式 python | 鬼谷子数学问题 steam挂刀教程 linux | history 命令的格式化输出 shell | 将本地镜像批量推送到 harbor windows | hosts 文件修复 kubernetes | configmap & secret kubernetes | RBAC 鉴权和 NetworkPolicy kubernetes | service & ingress kubernetes | 存储 kubernetes | 滚动升级和自动伸缩 kubernetes | 控制器 kubernetes | 日志 kubernetes | 调度 kubernetes | pod kubernetes | 杂记 linux | set 命令详解 ceph | openeuler 部署 ceph-v16 ceph | ceph-v16 离线安装解决方案 pxe 如何应对复杂的服务器硬件环境 python | 批量修改目录下文件名 《微习惯》 ceph | openeuler (aarch64) 部署 ceph-v16 troubleshooting | glibc 误升级后修复 pxe 安装配置大全 《人间失格》 跑步日常 [置顶] Hello, hugo! shell | 检索某 url 中所有文件的内容 shell | 不同执行方式的区别 shell | 开启 debug 模式 vscode | 常见问题 windows & linux 多网卡时设置默认路由以及添加静态路由 mysql (二) 主从复制原理 GTID 并行复制 mysql (一) 部署 mysql | 杂记 cicd | jenkins 部署 mall-swarm 项目 httpd 源码打包编译成 rpm 包 openssl 源码打包编译成 rpm 包 centos7 | 修改网卡名称 ceph | pool pg_num 配置 docker | 脚本方式批量导出/导入镜像 centos 密码尝试次数过多问题处理 centos7 | 升级内核至 5.10 CVE-1999-0526 ceph | centos7 部署 ceph-v12 python | 修改 pip 源 troubleshooting | 安装 cloud-init 后导致 ssh 连接失败
centos6 部署 openvpn
lvbibir · 2021-07-01 · via lvbibir's Blog

0 前言

本文参考以下链接

1 实验环境

3 台 centos6.5,1 台 win10,openvpn-2.4.7,easy-rsa-3.0.5

2 拓扑结构

Win10 安装 openvpn-gui,三台 centos6.5 为 vmware 虚拟机,分为 client、vpnserver、proxy

三台 centos6.5 的 eth0 网卡均为内网 (lan 区段) 地址 1.1.1.0/24 网段,proxy 额外添加一块 eth1 网卡设置 nat 模式模拟外网 ip

3 实验目的

win10 访问 proxy 的外网 ip 对应端口连接到 vpnserver,分配到内网 ip 后可以访问到 client

4 实验思路

  • proxy 配置 ipv4 转发,将访问到本机 eth1 网卡相对应的端口上的流量转发给 vpnserver 的 vpn 服务端口

  • vpnserver 为 win10 分配 ip 实现访问内网

5 实施步骤

5.1 初始化环境

  • 配置 ip
节点 ip
client: 1.1.1.1/24
vpnserver: 1.1.1.2/24
proxy: 1.1.1.3/24 192.168.150.114/24
win10: 192.168.150.1/24
  • 环境初始化(client 和 vpnserver 关闭 iptables 和 selinux,proxy 仅关闭 selinux)
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0

5.2 安装 vpnserver & easy-rsa

  • vpnserver 安装 openvpn

由于 centos6 的所有官方源已失效,使用 此链接 中的方法将源码编译成 rpm 包。

openvpn 版本:2.4.7

image-20210513152208797

image-20210513154450075

5.3 创建目录,配置 vars

  • 解压 easy-rsa 目录
[root@vpnserver ~]# mkdir openvpn
[root@vpnserver ~]# unzip easy-rsa-3.0.5.zip
[root@vpnserver ~]# mv easy-rsa-3.0.5 easy-rsa
[root@vpnserver ~]# mkdir -p /etc/openvpn
[root@vpnserver ~]# cp -a easy-rsa /etc/openvpn
  • 配置/etc/openvpn 目录
[root@vpnserver ~]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@vpnserver easyrsa3]# cp vars.example vars
[root@vpnserver easyrsa3]# vim vars

添加如下变量

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Beijing"
set_var EASYRSA_REQ_ORG         "lvbibir"
set_var EASYRSA_REQ_EMAIL       "lvbibir@163.com"
set_var EASYRSA_REQ_OU          "My OpenVPN"

5.4 创建服务端证书及 key

  • 创建服务端证书及 key

初始化

[root@vpnserver ~]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@vpnserver easyrsa3]# ./easyrsa init-pki

image-20210513154251555

创建根证书

[root@vpnserver easyrsa3]# ./easyrsa build-ca

image-20210513152355808

注意:在上述部分需要输入 PEM 密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入 common name 通用名,这个你自己随便设置个独一无二的

创建服务器端证书

[root@vpnserver easyrsa3]# ./easyrsa gen-req server nopass

image-20210513154701536

该过程中需要输入 common name,随意但是不要跟之前的根证书的一样

签约服务端证书

[root@vpnserver easyrsa3]# ./easyrsa sign server server

image-20210513154839323

需要手动输入 yes 确认,还需要提供创建 ca 证书时的密码

创建 Diffie-Hellman,确保 key 穿越不安全网络的命令

[root@vpnserver easyrsa3]# ./easyrsa gen-dh

image-20210513155046945

5.5 创建客户端证书及 key

  • 创建客户端证书

初始化

[root@vpnserver ~]# mkdir client
[root@vpnserver ~]# cd client/easy-rsa/easyrsa3/
[root@vpnserver easyrsa3]# ./easyrsa init-pki

需输入yes确认

需输入 yes 确认

创建客户端 key 及生成证书

[root@vpnserver easyrsa3]# ./easyrsa gen-req zhijie.liu

image-20210513160134188

名字自己自定义,该密码是用户使用该 key 登录时输入的密码,可以加 nopass 参数在客户端登录时无需输入密码

导入 req 证书

[root@vpnserver ~]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@vpnserver easyrsa3]# ./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/zhijie.liu.req zhijie.liu

image-20210513161517810

签约证书

[root@vpnserver easyrsa3]# ./easyrsa sign client zhijie.liu

image-20210513162659235

这里生成 client,名字要与之前导入名字一致

签约证书期间需要输入 yes 确认,期间需要输入 CA 的密码

5.6 归置证书

  • 把服务器端必要文件放到/etc/openvpn 下(ca 证书、服务端证书、密钥)
[root@vpnserver ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/
[root@vpnserver ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn/
[root@vpnserver ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn/
[root@vpnserver ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn/
  • 把客户端必要文件放到/root/client 目录下(客户端的证书、密钥)
[root@vpnserver ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/client
[root@vpnserver ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/zhijie.liu.crt /root/client/
[root@vpnserver ~]# cp /root/client/easy-rsa/easyrsa3/pki/private/zhijie.liu.key /root/client

5.7 server.conf 配置

  • 为服务器端编写配置文件

安装好配置文件后他会提供一个 server 配置的文件案例,将该文件放到/etc/openvpn 下

[root@vpnserver ~]# rpm -ql openvpn | grep server.conf

image-20210513161637077

[root@vpnserver ~]# cp /usr/share/doc/openvpn-2.4.7/sample/sample-config-files/server.conf /etc/openvpn/
  • 修改配置文件
[root@vpnserver ~]# vim /etc/openvpn/server.conf
[root@vpnserver ~]#  grep '^[^#|;]' /etc/openvpn/server.conf
local 0.0.0.0     #监听地址
port 1194     #监听端口
proto tcp     #监听协议
dev tun     #采用路由隧道模式
ca /etc/openvpn/ca.crt      #ca证书路径
cert /etc/openvpn/server.crt       #服务器证书
key /etc/openvpn/server.key  # This file should be kept secret 服务器秘钥
dh /etc/openvpn/dh.pem     #密钥交换协议文件
server 10.8.0.0 255.255.255.0     #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
ifconfig-pool-persist ipp.txt
push "route 1.1.1.0 255.255.255.0"	#推送内网地址
client-to-client       #客户端之间互相通信
keepalive 10 120       #存活时间,10秒ping一次,120 如未收到响应则视为断线
comp-lzo      #传输数据压缩
max-clients 100     #最多允许 100 客户端连接
user openvpn       #用户
group openvpn      #用户组
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3

5.8 其他设置

  • 用户配置
[root@vpnserver ~]# mkdir /var/log/openvpn/
[root@vpnserver ~]# useradd openvpn -s /sbin/nologin
[root@vpnserver ~]# chown -R openvpn.openvpn /var/log/openvpn/
[root@vpnserver ~]# chown -R openvpn.openvpn /etc/openvpn/*
  • iptables 设置 nat 规则和打开路由转发
[root@vpnserver ~]# iptables -A INPUT -p tcp --dport 1194 -j ACCEPT
[root@vpnserver ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
[root@vpnserver ~]# iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      *       10.8.0.0/24          0.0.0.0/0

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

[root@vpnserver ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@vpnserver ~]# sysctl -p
  • 开启 openvpn 服务
[root@vpnserver ~]# openvpn --daemon --config /etc/openvpn/server.conf
[root@vpnserver ~]# netstat -anput | grep 1194

image-20210514103123530

  • proxy 开启端口转发/映射
[root@along ~]# vim /etc/sysctl.conf //打开路由转发
net.ipv4.ip_forward = 1
[root@proxy ~]# sysctl -p
[root@proxy ~]# iptables -t nat -A PREROUTING -d 192.168.150.114 -p tcp --dport 1194 -j DNAT --to-destination 1.1.1.2:1194
[root@proxy ~]# iptables -t nat -A POSTROUTING -d 1.1.1.2 -p tcp --dport 1194 -j SNAT --to 1.1.1.3
[root@proxy ~]# iptables -A FORWARD -o eth0 -d 1.1.1.2 -p tcp --dport 1194 -j ACCEPT
[root@proxy ~]# iptables -A FORWARD -i eth0 -s 1.1.1.2 -p tcp --sport 1194 -j ACCEPT
[root@proxy ~]# iptables -A INPUT -p tcp --dport 1194 -j ACCEPT
[root@proxy ~]# service iptables save
[root@proxy ~]# service iptables reload
[root@proxy ~]# iptables -L -n

image-20210513170615121

6 客户段连接测试

6.1 client 配置文件

[root@vpnserver ~]# rpm -ql openvpn | grep client.ovpn
/usr/share/doc/openvpn-2.4.7/sample/sample-plugins/keying-material-exporter-demo/client.ovpn
[root@vpnserver ~]# cp /usr/share/doc/openvpn-2.4.7/sample/sample-plugins/keying-material-exporter-demo/client.ovpn /root/client
[root@vpnserver ~]# vim /root/client/client.ovpn
client
dev tun
proto tcp
remote 192.168.150.114 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3

6.2 拷贝客户端证书及配置文件

vpnserver 没装 vmtools 所以先将所有文件放到 proxy 上然后通过 scp 下载

[root@vpnserver openvpn]# scp /root/client/ca.crt root@1.1.1.3:/root/
[root@vpnserver openvpn]# scp /root/client/zhijie.liu.crt root@1.1.1.3:/root/
[root@vpnserver openvpn]# scp /root/client/zhijie.liu.key root@1.1.1.3:/root/
[root@vpnserver openvpn]# scp /root/client/client.ovpn root@1.1.1.3:/root/

将这四个文件放到 win10 的 C:\Users\lvbibir\OpenVPN\config 目录下

image-20210514103246272

然后点击连接

image-20210514173058861

6.3 ping 测试

ping client 的内网 ip 1.1.1.1

image-20210514173131498

以上