分类 Linux 下的文章

Hadoop 3.1.3集群实战安装记录

前言

大数据开发中,hadoop生态体系是大数据的核心,学习大数据开发去搭建一个简单的hadoop集群是必然的,本篇文章记录了搭建hadoop集群的步骤,好记性不如烂笔头,让我们开始吧。

先前准备

  • Centos7 Linux iso镜像
  • Vmware workstation虚拟机软件
  • Xshell
  • Hadoop3.1.3安装包
  • JDK1.8

Hadoop集群架构

节点1节点2节点3
IP192.168.110.100192.168.110.101192.168.110.102
Hostnamehadoop001hadoop002hadoop003
hadoop001hadoop002hadoop003
HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodeManager

简单描述一下本次搭建集群的架构,一共有三台节点,每台机器4G内存,50G存储,namenode方面使用hadoop001作为主控,hadoop003作为SecondaryNameNode冷备,hadoop002作为资源管理ResourceManager主控,3台机器作为我们的数据存储节点以及任务资源节点,做一个混合制分布式的集群。

配置虚拟机(3台虚拟机一样的配置)

  1. 使用Vmware安装Centos7虚拟机,默认使用最小安装,并修改静态ip和主机名
  2. 安装必备组件(使用root用户)
yum install epel-release -y
yum install wget -y
yum install net-tools -y
yum install vim -y
yum install rsync -y
  1. 创建hadoop用户并加入到超级用户列表中(使用root用户)
useradd hadoop
passwd hadoop

vim /etc/sudoers

# 添加以下内容
hadoop  ALL=(ALL)       NOPASSWD:ALL
  1. 创建hadoop安装文件夹(使用root用户)
mkdir -p /opt/hadoop/module
mkdir -p /opt/hadoop/software
  1. 更改文件夹权限(使用root用户)
chown -R hadoop:hadoop /opt/hadoop
  1. 上传安装包至文件夹中,并解压(使用hadoop用户)
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/hadoop/module
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/hadoop/module
  1. 配置环境变量至全局(使用root用户)
vim /etc/bashrc

# 添加以下内容至文件最后
# JAVA_HOME
export JAVA_HOME=/opt/hadoop/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  1. 配置主机名到hosts文件中
vim /etc/hosts

# 将以下内容添加至文件中
192.168.110.100 hadoop001 
192.168.110.101 hadoop002 
192.168.110.102 hadoop003
  1. 配置分发脚本
##########################################################
#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
    then
        echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in hadoop001 hadoop002 hadoop003
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
    #4 判断文件是否存在
        if [ -e $file ]
        then
            #5. 获取父目录
            pdir=$(cd -P $(dirname $file); pwd)
            #6. 获取当前文件的名称
            fname=$(basename $file)
            ssh $host "mkdir -p $pdir"
            rsync -av $pdir/$fname $host:$pdir
        else
            echo $file does not exists!
        fi
    done
done
#########################################################

# 将以上脚本保存至/usr/bin/xsync
chmod +x /usr/bin/xsync
  1. 配置查看集群状态脚本
########################################
#!/bin/bash

for i in hadoop001 hadoop002 hadoop003
do
    echo "========    $i    ========"
    ssh $i "jps | grep -v Jps"
done
########################################

# 将以上脚本保存至/usr/bin/jpsall
chmod +x /usr/bin/jpsall
  1. 配置ssh免密

    • 生成秘钥(三台机器上操作)
    # 生成 公钥+私钥
    ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa
    
    # 将本地公钥添加到授权文件中
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 收集其他机器的公钥到一台机器的`authorized_keys`中,设置`600`权限,并分发到其他机器上去
chmod 600 ~/.ssh/authorized_keys
xsync ~/.ssh/authorized_keys

配置Hadoop集群

  1. 修改$HADOOP_HOME/etc/hadoop中的core-site.xml
<!-- 配置默认name node 的服务器地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop001:8020</value>
</property>
<!-- Hadoop数据路径 -->
<property>
    <name>hadoop.data.dir</name>
    <value>/opt/hadoop/module/hadoop-3.1.3/data</value>
</property>
<!-- Hive兼容性配置 -->
<property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
</property>
<!-- Hive兼容性配置 -->
<property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
</property>
<!-- Hive兼容性配置 -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>hadoop</value>
</property>
  1. 修改$HADOOP_HOME/etc/hadoop中的hdfs-site.xml
<!-- 配置namenode数据存储路径 -->
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file://${hadoop.data.dir}/name</value>
</property>
<!-- 配置datanode数据存储路径 -->
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.data.dir}/data</value>
</property>
<!-- 配置secondary namenode数据存储路径 -->
<property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>file://${hadoop.data.dir}/namesecondary</value>
</property>
<!-- 配置Hive兼容性配置 -->
<property>
    <name>dfs.client.datanode-restart.timeout</name>
    <value>30</value>
</property>
<!-- 配置secondary namenode地址 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop003:9868</value>
</property>
  1. 修改$HADOOP_HOME/etc/hadoop中的yarn-site.xml
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 配置resource manager地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop002</value>
</property>

<!-- 配置环境变量 -->
<property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>

<!-- 配置日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<!-- 配置jobhistory服务器 -->
<property>  
<name>yarn.log.server.url</name>  
<value>http://hadoop001:19888/jobhistory/logs</value>  
</property>

<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
  1. 修改$HADOOP_HOME/etc/hadoop中的mapred-site.xml
<!-- 配置计算服务用yarn进行调度 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop001:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop001:19888</value>
</property>
  1. 修改$HADOOP_HOME/etc/hadoop中的workers
# 将所有节点加入到workers
hadoop001
hadoop002
hadoop003
  1. 分发配置文件到其他节点

启动集群

  1. 第一次启动,格式化namenode,在hadoop001上执行:
hdfs namenode -format
  1. 启动namenode与secondary namenode,在hadoop001上执行:
start-dfs.sh
  1. 启动resource manager,data node,node manager,在hadoop002上执行:
start-yarn.sh

验证集群

  1. 查看namenode页面:http://hadoop001:9870/dfshealth.html#tab-datanode

image-20210212225910569

  1. 查看resource manager页面:http://hadoop002:8088/cluster/nodesimage-20210212230036455
  2. 手动提交任务到hdfs,并用自带的测试jar包进行测试
hdfs dfs -mkdir /input
hdfs dfs -put xsync.sh /input/xsync.sh
hadoop jar /opt/hadoop/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/xsync.sh /output
hdfs dfs -ls /output

image-20210212230309964

前言

深夜更新,没想到吧。最近发生了很多的事情,很多很多,多到无法想象,2020年的前半年对我一点都不太友好,希望下半年能够时来运转,让我摆脱这种困境。

随着计算机和5G技术的发展,云计算、云存储这种需要大量网络带宽的解决方案开始变得愈发流行起来,企业越来越喜欢把自己的数据和自己的业务搭建在云上,本地没有对应的负载和维护成本,既能够解决数据存储和备份的痛点,对于版本回退和灾备也有了更好的支持,可能在未来10年后,人们只要靠一个浏览器,可是实现当前所有软件的功能。

今天的主角就是依赖于云存在的code-server,项目地址:https://github.com/cdr/code-server

顾名思义,从字面意思上来看它是一个编码服务器,实际上它就是一个可以架设在云端的代码编辑器,也是vscode的云版本,只要在对应的服务器上架设好的服务,理论上只要你有浏览器,你可以在任何设备上进行代码的编写,同时你的环境也不会丢掉,以后再也不用走哪里都带着一个笨重的电脑,可能一个蓝牙键盘,一个iPad就足够。好了,铺垫了这么多,接下来让我们来看看它如何架设。

安装

Ubuntu 服务器

# 下载对应安装包
wget https://github.com/cdr/code-server/releases/download/3.4.1/code-server_3.4.1_amd64.deb
 
# 安装包
sudo dpkg -i code-server_3.4.1_amd64.deb

Centos 服务器

# 下载对应安装包
wget https://github.com/cdr/code-server/releases/download/3.4.1/code-server-3.4.1-amd64.rpm
 
# 安装包
sudo rpm -i code-server-3.4.1-amd64.rpm

配置

# 修改配置文件
vim ~/.config/code-server/config.yaml

一打开配置文件你可能会看到以下几个选项:

  • bind-addr
  • auth
  • password
  • cert

一般来讲,我们主要关心的是bind-addrpassword这两个选项,bind-addr是设置code-server的监听地址,默认为127.0.0.1:8080,如果你是在云服务器主机上架设的话需要将127.0.0.1改成0.0.0.0:8080,如果是在自己的桌面版Linux上面装的话则不需要修改,8080是指服务的端口,如果不想使用8080请自行修改;接下来password这个参数显而易见,就是修改我们进入code-server的密码,将这个改成自己喜欢的密码即可。

初始化启动

systemctl --user enable --now code-server

享用

Tips

更多好玩的教程,好玩的技术博客,请持续关注下方我的微信公众号,如果有好的建议和好的想法欢迎公众号后台留言或者发送邮件至TyrantLucifer@linuxstudy.cn,我们下期再见!

我的微信公众号

前言

git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,是Linux之父的另外一个得意之作,也是程序员团队协作一个不可缺少的工具,平时个人开发者都使用github来进行git的使用,如果团队开发又想将代码保存在自己服务器怎么办?今天就来记录一下如何在自己的服务器上搭建git。

准备工作

  • 一台安装了git的Linux服务器,系统版本不限
  • 服务器具有root权限

开始

创建git用户

useradd git # 增加git用户
password git # 设置密码

创建版本库保存目录

mkdir /git # 创建目录
chown -R git:git /git # 设置权限
cd /git # 进入目录
su git # 切换到git用户

创建并初始化版本库

mkdir testrepo
git init --bare testrepo/

此时我们的git版本库已经创建完成了,接下来需要做的是配置ssh免密

修改ssh配置文件

vim /etc/ssh/ssh_config
 
# 添加以下内容到文件中
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
 
systemctl restart sshd # 重启ssh服务

客户端生成公钥

请注意,这里需要在客户端机器上进行

ssh-keygen -t rsa -C "admin@admin.com" # 这里的邮件地址可以随便填,但是要记录下来

找到生成的id_rsa.pub,将文件内容复制出来,一般文件保存于~/.ssh

服务器配置authorized_keys

使用root用户登录到服务器,并切换到git

su git

编辑authorized_keys

mkdir -p ~/.ssh
vim ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

将上面id_rsa.pub的内容保存authorized_keys到中

客户端clone项目到本地测试

git config --global user.email "admin@admin.com" # 这里填刚才生成公钥时使用的邮箱地址
git config --global user.name "admin" # 这里用户名随便填
git clone git@*.*.*.*:/git/testrepo.git

看到图中提示,说明我们的git服务器已经搭建成功,至此,我们已经成功搭建了一台只属于自己的git服务器。

Tips

  • 更多好玩的教程,好玩的技术博客,请持续关注下方我的微信公众号,如果有好的建议和好的想法欢迎公众号后台留言或者发送邮件至TyrantLucifer@linuxstudy.cn,我们下期再见!

我的微信公众号

前言

树莓派相信熟悉小型Linux开发板的朋友都不陌生,作为一款优秀的卡片型小电脑,麻雀虽小五脏俱全,普通电脑能做的事情,它全都能做,最重要的一个优点,它作为一台24小时不停服的服务器来讲,低功耗,高收益,所以民间高手用树莓派来diy各种千奇百怪好玩好用的东西,例如用树莓派做家庭nas存放自己的小姐姐,用树莓派做为软路由管理家庭的网络,用树莓派做自己的贴心语音小助手来管理家庭智能家电等等一系列的应用场景,可玩性很高,作为一个很爱折腾的我也是对它爱不释手,很多人买来树莓派就是放在角落吃灰,但我的树莓派至今已经平稳运行了2年之久,它承担了我的毕业设计---智能语音机器人,承担了家中的nas共享,承担了平时在家的jupyter开发环境,在今天,我将赋予它新的使命---扶墙(FQ)好帮手,让我们家庭网络的终端中,无需连接威批恩便可以顺畅睁眼看世界!接下来请跟随文章的脚步,一起走进奇妙的折腾之旅~~~

本篇教程会占用你大概20分钟左右,过程较为复杂,但只要坚持做完,你会发现自己的扶墙是多么的方便!

准备

  • 一台刷好系统可以正常工作的树莓派
  • shadowsocksR订阅链接(一般从机场主处购买获得)
  • 树莓派安装Python环境

开始

  1. 使用ssh工具链接进入到树莓派

  1. 安装必备依赖
sudo apt install python3-pip
sudo apt install net-tools
  1. 从github下载ssr-command-client源码,关于ssr-command-client的信息,详情请见https://github.com/TyrantLucifer/ssr-command-client
git clone https://github.com/TyrantLucifer/ssr-command-client.git
  1. 进入到项目文件夹中,安装ssr-command-client相关依赖
sudo pip3 install -r requirement.txt
  1. 设置ssr-command-client订阅链接
python3 main.py --setting-url 你的订阅链接地址
  1. 更新订阅列表
python3 main.py -u

  1. 查看节点列表是否正常
python3 main.py -l

  1. 设置代理IP地址
  • 查看本机ip
sudo ifconfig

记住这个IP地址

  • 修改配置项
python3 main.py --setting-address 上面的ip地址
  1. 使用第七步显示的节点id,选择一个id,生成配置json文件
python3 main.py -c 1

  1. 启动代理
python3 main.py -s

享用

按照图中指示设置内容,点击左下角应用选项,即可设置完毕

  • 设置代理

选择我们刚才设置好的代理方式

打开谷歌,愉快的网上冲浪

  • QQ浏览器,与Google浏览器设置方法一致

Tips

  • 我没有订阅链接,但我还是想体验扶墙快感怎么办?ssr-command-client项目自带github免费订阅链接,下载项目到本地后直接执行python3 main.py -l即可
# github共享ssr订阅链接
https://raw.githubusercontent.com/satrom/V2SSR/master/SSR/Day.txt
  • 我还想手机也能实现跟电脑一样的功能,别着急,下期更新~~~
  • 我没有树莓派怎么办,云服务器也可以实现这个功能,把ip换成公网ip即可,也是一样的步骤去进行设置
  • 我没看懂怎么办,如果有需要的话我可以出一期教学视频给大家演示一遍,这看后台读者的需
  • 我想停止代理,更换节点怎么办?使用python3 main.py -S停止代理,使用python3 main.py -c 新的节点id重新生成节点配置文件,使用python3 main.py -s启动代理
  • 我想实现网站自动分流,墙外网站走代理,墙内网站走直连,别着急,下期更新~~~
  • 更多好玩的教程,好玩的技术博客,请持续关注下方我的微信公众号,如果有好的建议和好的想法欢迎公众号后台留言或者发送邮件至TyrantLucifer@linuxstudy.cn,我们下期再见!

我的微信公众号

前言

ShadowsocksR,小名酸酸乳,在扶墙届具有着不小的名声,如今机场的大半江山都被这款知名代理工具所占据,我平时的工作学习环境是个人笔记的Linux系统(Ubuntu 18.04),每日都有着上Google的需求,所以扶墙出去也是每日的必需操作,然而这款代理工具发展到至今,一键配置的脚本有很多,Windows下客户端有很多,唯独就是没有Linux环境下的客户端,之前倒是是有一款(electron-ssr),但不久前作者彻底删除了项目,估摸着是被叫去喝茶了,只剩下v0.2.6版本孤零零的存活于世,我曾经尝试过这款软件,使用体验还不错,界面化操作,适用于小白玩家,界面点点点,但作为一名硬核的Linux玩家,命令能实现的骚操作为什么不能用命令行实现呢?GUI在Linux下简直是浪费,为了满足我平时的需求,能够在命令行下直接一键开启代理,更换节点,ssr-command-client应运而生。

介绍

ssr-command-client是我开发的一款基于Python3的酸酸乳命令行客户端,功能简洁,主要是针对于Linux用户在命令行下能够愉快的使用代理上网冲浪,定位清晰,不臃肿,轻量级,没有GUI的限制,可以使用在国内的云服务器(阿里云、腾讯云)中,国内云服务器普遍存在一个问题,git速度很慢很慢,以至于我们在安装一些开源组件从github上拉取源码的过程变得十分缓慢,通常以10KB为秒的计数单位,而ssr-command-client完美解决了这个问题,世界可达,项目地址:https://github.com/TyrantLucifer/ssr-command-client(跪求star)

特性

ssr-command-client主要有以下功能:

  • 支持订阅链接解析
  • 支持指定本地socks5代理端口
  • 支持测试节点ping值

安装方式

git clone https://github.com/TyrantLucifer/ssr-commend-client.git
cd ssr-commend-client
pip3 install -r requirement.txt

使用方法

python3 main.py [OPTIONS]

OPTIONS

-l --list "show ssr list" 展示ssr节点列表
-s --start "start ssr proxy" 启动ssr代理服务
-S --stop "stop ssr proxy" 停止ssr代理服务
-p --port port "assign local port" 指定本地代理端口
-c --config ssr_node_id "generate config json file" 生成指定节点json文件
-u --update "update ssr list" 更新ssr节点列表

效果展示

  • 输出ssr链接节点列表 python3 main.py -l

  • 更新ssr订阅链接 python3 main.py -u

  • 生成ssr节点配置文件 python3 main.py -c ssr_node_id

  • 指定本地代理端口并生成配置文件 python3 main.py -c ssr_node_id -p local_port

  • 启动ssr代理 python3 main.py -s

  • 停止ssr代理 python3 main.py -S

未来计划

  • [ ] 支持多订阅链接解析
  • [ ] 支持自动选择速度最优节点
  • [ ] 支持自动生成PAC代理文件
  • [ ] 支持一键关闭、开启系统PAC网络代理(针对于Ubuntu 18.04)
  • [ ] 支持指定ssr链接启动服务
  • [ ] 支持命令行解析ssr链接信息

总结

没有轮子造轮子,这是我一概的作风,也是我学习编程的主要驱动力,兴趣占据了大半,我想做出一些让大多数人都觉得好用的东西,方便自我也方便他人,到今天为止这是我写的第44篇博客,但是发在公众号的只有几篇,未来我会坚持更新,记录自己的代码人生,code is my life!

Tips

如果有好的建议,欢迎发邮件给我,关注下方我的个人微信公众号在后台留言,或者在项目主页提交issue,如果觉得好用的话,各位读者姥爷在github项目首页帮我点个star,右下角帮我点击在看,感激不尽!

我的微信公众号

老司机教你用树莓派搭建Jupyter Web开发环境

前言

近期,从箱子里找出了毕业设计用的开发板神器---树莓派(Raspberry Pi),用它做的语音机器人还拿到了学校为数不多的优秀毕业设计,现在回想起来还是很激动,前几篇文章介绍过用树莓派搭建共享存储smb服务、实现内网穿透,今天将介绍用树莓派搭建好用的Python开发环境---Jupyter Notebook,废话不多说,让我们开始吧!

Jupyter Notebook简介

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。

Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等

安装配置

  • ssh登录到树莓派,并切换到root用户,安装Jupyter

这里说一下为什么用root,博主亲自实验过,如果用pi用户的话,Jupyter是写不到环境变量中的,可执行程序无法找到,也就启动不了Jupyter

sudo su
pip3 install jupyter
pip3 install jupyter_contrib_nbextensions
pip3 install six=1.11.0
jupyter contrib nbextension install

执行完上面的命令之后,命令行一直在输出,等到结束之后,就代表安装完毕,然后切换回pi用户,用普通用户执行下面的步骤

  • 生成配置文件

    jupyter notebook --generate-config
  • 生成密码

    jupyter notebook password

执行这条命令之后,命令行会让你输入密码,自行设置这个密码,并记住这个密码,一会Web登录要用到

  • 编辑配置文件

    1. ~/.jupyter/jupyter_notebook_config.json文件中复制出password后面的字符串

    1569597732956

    1. ~/.jupyter/jupyter_notebook_config.py文件中加入以下内容

      c.NotebookApp.ip = '*'
      c.NotebookApp.allow_remote_access = True
      c.NotebookApp.password = u'填上面复制出来的字符串'
      c.NotebookApp.port = 8888
      c.NotebookApp.open_browser = False
      c.NotebookApp.notebook_dir = '/home/pi/jupyter_notebook'

创建可持续化服务文件

切换到root用户,执行

vim /lib/systemd/system/jupyter.service

在文件中添加以下内容:
[Unit]
Description=jupyter_notebook service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/jupyter notebook --allow-root

[Install]
WantedBy=multi-user.target

启动服务

systemctl start jupyter

systemctl enable jupyter

享用

在浏览器中输入树莓派ip:8888,输入密码,就可以享用你的Jupyter了,开始愉快的编程吧~~~

1569598294810

近期,由于在外面实习,但是毕业设计所使用的树莓派开发板还静静躺在我的宿舍之中,为了能够每天下班也能做我的毕业设计,特地去搜索了一些关于内网穿透的东西,发现了GitHub上一个开源的内网穿透工具---frp,经过短暂的学习之后,终于实现了能够远程ssh和vnc到我的树莓派。

内网穿透

内网穿透即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点连接通信

准备工作

  • 具有公网IP的vps
  • 树莓派可上外网

frp

  • 项目地址:https://github.com/fatedier/frp
  • 项目功能:实现内网穿透,原理为端口映射与流量转发
  • 具体功能实现:远程ssh远程vnc远程web等等

配置

1.服务器端配置

# 远程以root用户登陆你的vps

# 下载frp
wget https://github.com/fatedier/frp/releases/download/v0.25.3/frp_0.25.3_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.25.3_linux_amd64.tar.gz

# 编辑配置文件
vim frp_0.25.3_linux_amd64/frps.ini

########
[common]
bind_port = 8000
########

# 将以上内容添加至配置文件中,bind_port 是frp客户端与服务器连接的端口,需要在你的vps开放权限

# 编辑服务文件
vim /lib/systemd/system/frp.service

######################################
 [Unit]
Description=frp service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/frp_0.25.3_linux_amd64/frps -c /root/frp_0.25.3_linux_amd64/frps.ini

[Install]
WantedBy=multi-user.target
######################################

# 将以上内容添加至配置文件中,保存退出

################################
systemctl start frp   # 启动frp服务
systemctl restart frp # 重启frp服务
systemctl enable frp  # 将frp加入开机启动项
systemctl status frp  # 查看frp服务状态
################################

2.客户端配置

# 登陆你的树莓派

# 下载frp
wget https://github.com/fatedier/frp/releases/download/v0.25.3/frp_0.25.3_linux_arm.tar.gz

# 解压
tar -zxvf frp_0.25.3_linux_arm.tar.gz

# 编辑配置文件
vim frp_0.25.3_linux_amd64/frpc.ini

################################
[common]
server_addr = 104.243.24.56
server_port = 8000 #这个端口必须跟服务器的一样
 
[ssh]
type = tcp 
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 #这个端口自行设置,需要vps开启这个端口的权限
 
[vnc]
type = tcp 
local_ip = 127.0.0.1
local_port = 5900
remote_port = 6001 #这个端口自行设置,需要vps开启这个端口的权限
################################

# 将以上内容添加至配置文件中

# 编辑服务文件
vim /lib/systemd/system/frp.service

######################################
 [Unit]
Description=frp service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/home/pi/frp_0.25.3_linux_arm/frpc -c /home/pi/frp_0.25.3_linux_arm/frpc.ini

[Install]
WantedBy=multi-user.target
######################################

# 将以上内容添加至配置文件中,保存退出

################################
systemctl start frp   # 启动frp服务
systemctl restart frp # 重启frp服务
systemctl enable frp  # 将frp加入开机启动项
systemctl status frp  # 查看frp服务状态
################################

享用

  • 连接ssh:ssh -oPort=6000 pi@vps的ip地址
  • 连接vnc:用vnc客户端连接vps的ip地址:6001