专栏首页木制robot技术杂谈Ubuntu 架设 OpenV** 实现内网穿透

抱歉,你查看的文章已删除

Ubuntu 架设 OpenV** 实现内网穿透

前言

家里的网络因为没有公网 IP,有时候想要连接到家里的树莓派或者电脑就无法实现。这个时候可以采用内网穿透的方法远程连接家中的机器,内网穿透的方案有很多,下面介绍一种采用 OpenV** 实现内网穿透的方案。


配置

主机:腾讯云 操作系统:Ubuntu 16.04

教程

安装 OpenV**

首先,我们需要在服务器安装 OPenV**。在 Ubuntu 系统中我们可以通过 apt 简单的进行安装。同时我们也需要安装 easy-rsa,它可以帮助我们生成 V** 使用过程中所需的 CA 证书。

$ sudo apt-get update
$ sudo apt-get install openV** easy-rsa

设置 CA 目录

OpenV** 是使用 TLS/SSL 的 V**。这意味着它利用证书来加密服务器和客户端之间的通信。为了发布受信任的证书,我们需要建立一个自己的简单的证书颁发机构(CA)。 使用 make-cadir 命令复制 easy-rsa 模板到 home 目录。

make-cadir ~/openV**/openV**-ca

接着进入刚刚新建的目录准备配置 CA:

~/openV**/openV**-ca

配置 CA 变量

进入 ~/openV**/openV**-ca 目录后,我们需要修改 vars 文件,以便于生成需要的 CA 值。

$ vim vars

在文件底部找到以下配置:

...
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
...

将这些变量修改为任意你喜欢的值,但是不要为空:

...
export KEY_COUNTRY="CN"
export KEY_PROVINCE="SC"
export KEY_CITY="Chengdu"
export KEY_ORG="woodenrobot"
export KEY_EMAIL="woodenrobot1993@gmail.com"
export KEY_OU="Community"
...

然后,我们还要修改紧接着出现的 KEY_NAME 的值,为了简单起见,我们改为 server:

export KEY_NAME="server"

构建 CA 证书

首先进入你的 CA 目录,然后执行 source vars:

$ cd ~/openV**/openV**-ca
$ source vars

接着会有以下输出:

$ NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/ubuntu/openV**/openV**-ca/keys

执行下列操作确保操作环境干净:

$ ./clean-all

现在我们可以构建根 CA:

$ ./build-ca

这将会启动创建根证书颁发密钥、证书的过程。由于我们刚才修改了 vars 文件,所有值应该都会自动填充。所以,一路回车就好了:

Generating a 2048 bit RSA private key
..........................................................................................+++
...............................+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BJ]:
Locality Name (eg, city) [Beijing]:
Organization Name (eg, company) [woodenrobot]:
Organizational Unit Name (eg, section) [Community]:
Common Name (eg, your name or your server's hostname) [woodenrobot]:
Name [server]:
Email Address [woodenrobot@163.com]:

现在,我们就有了创建以下步骤需要的 CA 证书。

创建服务器端证书、密钥和加密文件

通过下列命令生成服务器端证书和秘钥:

./build-key-server server

注:server 就是刚才在 vars 文件中修改的 KEY_NAME 变量的值。请不要使用别的名字! 然后一直回车选择默认值即可,不要设置 challenge password,直接回车即可。到最后,你需要输入两次 y 注册证书和提交。

...
Certificate is to be certified until May  1 17:51:16 2026 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

然后还需要生成一些其他东西。我们可以在密钥交换过程中生成一个强大的 Diffie-Hellman 密钥:

$ ./build-dh

这个操作大约会花费几分钟不等。 然后,我们可以生成 HMAC 签名加强服务器的 TLS 完整性验证功能:

$ openV** --genkey --secret keys/ta.key

配置 OpenV** 服务

首先将刚刚生成的各类文件复制到 OpenV** 目录下:

$ cd ~/openV**-ca/keys
$ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openV**

然后,解压并复制一个 OpenV** 配置文件到 OpenV** 目录:

$ gunzip -c /usr/share/doc/openV**/examples/sample-config-files/server.conf.gz | sudo tee /etc/openV**/server.conf

接着更改配置,注释掉 udp 更改协议为 tcp:

proto tcp
;proto udp

找到 tls-auth 位置,去掉注释,并在下面新增一行:

tls-auth ta.key 0 # This file is secret
key-direction 0

去掉 usergroup 行前的注释:

user nobody
group nogroup

去掉 client-to-client 行前的注释允许客户端之间互相访问:

client-to-client

开启客户端固定 IP 配置文件夹:

client-config-dir ccd

去掉注释后的完整配置如下:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir ccd
client-to-client
keepalive 10 120
tls-auth ta.key 0
key-direction 0
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openV**-status.log
verb 3

调整服务器网络配置

允许 IP 转发

编辑 sudo vim /etc/sysctl.conf 文件,去掉 net.ipv4.ip_forward 设置前的注释:

net.ipv4.ip_forward=1

输入 sudo sysctl -p 读取文件并对当前会话生效。

调整 UFW 规则

sudo vim /etc/ufw/before.rules 编辑文件,在文件顶部,新增如下 11-18 行的内容:

01 #
02 # rules.before
03 #
04 # Rules that should be run before the ufw command line added rules. Custom
05 # rules should be added to one of these chains:
06 #   ufw-before-input
07 #   ufw-before-output
08 #   ufw-before-forward
09 #
10 
11 # START OPENV** RULES
12 # NAT table rules
13 *nat
14 :POSTROUTING ACCEPT [0:0] 
15 # Allow traffic from OpenV** client to eth0
16 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
17 COMMIT
18 # END OPENV** RULES
19
20 # Don't delete these required lines, otherwise there will be errors
*filter
. . .

其中,第 16 行还需要做一点调整。在终端执行 ip route | grep default 命令,你会看到类似如下的输出:

default via xxx.xxx.xxx.xxx dev eth0

dev 后的内容如果与第 16 行的 eth0 不同则更换 eth0 为 dev 后的内容,保存文件退出。

接着 sudo vim /etc/default/ufw 修改文件,找到 DEFAULT_FORWARD_POLICY 设置,修改为:

DEFAULT_FORWARD_POLICY="ACCEPT"

打开 OpenV** 端口并使变化生效

$ sudo ufw allow 1194/tcp
$ sudo ufw disable
$ sudo ufw enable

启动 OpenV**

执行:

$ sudo systemctl start openV**@server

设置开机自启:

$ sudo systemctl enable openV**@server

创建客户端配置

生成客户端证书、密钥对

$ cd ~/openV**-ca
$ source vars
$ ./build-key client-woodenrobot

client-woodenrobot 为密钥对名称,生成过程中回车选择默认选项即可。

创建客户端配置

执行下列命令,生成客户端配置的基础文件:

$ mkdir -p ~/client-configs/files
$ chmod 700 ~/client-configs/files
$ cp /usr/share/doc/openV**/examples/sample-config-files/client.conf ~/client-configs/base.conf

然后打开 ~/client-configs/base.conf 文件,修改 remote server_IP_address 1194 一行为你的服务器公网 IP。 然后更改客户端协议为 tcp:

;dev tap
dev tun

去掉 usergroup 前的注释:

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

找到 ca/cert/key,注释掉:

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

最后在文件末新增一行:

key-direction 1

保存退出文件。 去掉注释后的完整配置为:

client
dev tun
proto tcp
remote server_IP_address 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
key-direction 1

创建配置生成脚本

新建 ~/client-configs/make_config.sh 文件,复制如下内容:

#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openV**-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.oV**

保存并赋予执行权限:

$ chmod 700 ~/client-configs/make_config.sh

生成客户端配置

执行:

$ cd ~/client-configs
$ ./make_config.sh client-woodenrobot

使用此脚本生成一个配置文件方便客户端使用。 注:需要生成客户端密钥后才可使用脚本生成配置文件,client-woodenrobot.oV** 为刚刚生成的客户端密钥名称 生成后的脚本储存在 ~/client-configs/files 目录下,名称为 client-woodenrobot。将文件下载到本地即可使用了。

为客户端设置固定 IP

首先在 OpenV** 所在的文件夹内创建 ccd 文件夹:

$ sudo mkdir -p /etc/openV**/ccd

然后进入该文件夹并创建与客户端密钥名称相同的文件夹并写入一下内容:

$ cd /etc/openV**/ccd
$ vim client-woodenrobot

内容如下:

ifconfig-push 10.8.0.8 10.8.0.9

此内容意为固定 client-woodenrobot 客户端的 OpenV** 内网 IP 为 10.8.0.8

客户端命令行使用

首先安装 OpenV**, 运行时选择配置为客户端配置文件:

$ sudo openV** --config client-woodenrobot.oV**

使用此方法可以让家里的电脑或者树莓派等设备实现内网穿透,从而远程连接进行操作。

注:该方法只有连接内网机器时会使用 OpenV** 代理,平时访问网页等不会走代理,并不是全局代理,节省服务带宽的使用

参考

  1. 怎样在 Ubuntu 16.04 上安装 OpenV** 服务
  2. How To Set Up an OpenV** Server on Ubuntu 16.04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

推荐阅读

  • 原生加密:腾讯云数据安全中台解决方案

    随着企业上云和数字化转型升级的深化,数据正在成为企业的核心资产之一,在生产过程中发挥的价值越来越大。

    腾小云
  • 海量挑战:腾讯云ES可用性及性能优化实践

    腾讯会议于2019年12月底上线,两个月内日活突破1000万,被广泛应用于疫情防控会议、远程办公、师生远程授课等场景,为疫情期间的复工复产提供了重要的远程沟通工具。极速增长的会议需求,让腾讯会议服务质量分析系统经受着巨大的考验。

    腾小云
  • 存储成本降低80%,有赞数据中台成本治理怎么做的?

    从整体的资源角度看,有赞数据中台机器数量在 1500 台左右,其中大部分是物理机,也有一部分是虚拟机,同时有 100 个左右的应用、4 万个核,数据规模在 15 PB 左右。

    腾小云
  • 吴洪声十问杨卿:下班路上如何顺手黑掉地铁系统?

    杨卿:黑客艺术家,腾讯安全学院副院长,知名安全团队创始人,世界黑客大会DEFCON GROUP中国"DC365"发起人,中国网络空间安全人才教育联盟人才挖掘发现组副组长,《无线电安全攻防大揭秘》、《硬件安全攻防大揭秘》、《智能汽车安全攻防大揭秘》、《黑客大揭秘:近源渗透测试》及Springer中国作者最具影响力榜单《Inside Radio: An Attack and Defense Guide》等网络安全畅销书作者,国漫《黑客特战队》作者。

    腾讯云域名与DNSPod团队
  • 腾讯云 Serverless CI/CD 自动化部署实战

    本文将为大家讲解 Serverless 工作原理、架构优势和 Serverless 应用的开发流程,以及如何使用 Serverless CI/CD 能力进行自动化部署。 本次和大家分享的提纲如下: 什么是 Serverless CI/CD? Serverless 介绍 Serverless 架构 CI/CD 与 Serverless CI/CD Serverless CI/CD 应用 Serverless 应用开发流程 Serverless CI/CD 优势 Serverless CI/CD 实战 基于

    腾讯云serverless团队
  • 干货 | 数据库压力降低90%,携程机票订单缓存系统实践

    Chaplin,携程资深PMO,平时喜欢解决系统相关的问题,包括但不限于分布式/大数据量/性能/体验等,不畏复杂但更喜欢简单。

    携程技术
  • 干货 | 携程中台化背景下的元数据驱动架构实践

    为解决系统重复建设、能力复用性低的问题,携程启动了中台化建设步伐。旅游行业的中台建设,携程并非从零开始,前期已经积累了行业中多个场景的业务和技术的中台能力。因系统建设的复杂,亟需一个中台大脑站在全局视角进行公司中台能力的梳理和建设。

    携程技术
  • 腾讯安全发布《2020上半年勒索病毒报告》,勒索病毒攻击依然高频发生

    近日,腾讯安全正式对外发布《2020上半年勒索病毒报告》(以下简称“报告”)。《报告》显示,上半年全球大型企业遭受勒索病毒打击的事件依然高频发生。新型勒索病毒层出不穷,技术上不断进化,呈现五大最新攻击态势。腾讯安全也提供从威胁情报到安全产品的整体防护解决方案,协助企业抵御勒索病毒攻击。

    腾讯安全
  • 客户数量突破百万,富途核心数据库单日查询峰值超50亿次

    金融行业本身是传统行业中IT技术领先发展的一个行业。如果说在互联网科技时代有何不同,那就是今天的金融科技建设,在过去更多面向机构内提升生产效率的基础上,变得更加从用户体验提升、用技术驱动业务而出发。

    分布式数据库TDSQL
  • 深夜,不小心看到了老板秒删的朋友圈

    什么?!想建立知识社区、完善培训体系、推动文化落地……其中遇到的难题腾讯乐享统统都能帮你解决!

    腾讯乐享

扫码关注云+社区

领取腾讯云代金券