欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

frp内网穿透

最编程 2024-06-20 16:19:57
...

一、内网穿透介绍

内网穿透是什么意思? - 花生壳内网穿透的回答 - 知乎 https://www.zhihu.com/question/63098230/answer/697954117

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与 NAT 设备的相对位置介绍内网穿透方法。 [1]

UDP 内网穿透的实质是利用路由器上的NAT 系统。NAT 是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。NAT可以完成重用地址,并且对于内部的网络结构可以实现对外隐蔽。 [2]

二、frp内网穿透

frp实现内网穿透,需要在服务器端配置frps,开放相应端口,实现一个可以提供访问的外网ip;客户端(树莓派、ros机器人、windows电脑)需要配置frpc,开启端口对应,让本地ip和外网ip对应起来。

不管是内网穿透树莓派、ros、windows电脑,阿里云服务器端的frps配置都是一样的,需要开启7000端口。而客户端依照系统不同和端口的实际开放需求不同,frpc文件都要有不同。注意客户端的22端口都可以开放,只需要配置中session名称(即[]中的名字)不同,以及映射到阿里云服务器的端口不同即可。

  • frp下载地址

frp的github下载地址:Releases · fatedier/frp (github.com)

github加速下载:下载 (serctl.com)

有时候在 github 上下载安装包的时候需要选择自己 CPU 的架构情况了。会提供不同操作系统的三种架构, x8632 位架构和 64 位架构,以及 arm 架构。

阿里云服务器(ubuntu系统)下载的是:frp_0.41.0_linux_amd64.tar.gz

树莓派下载的是:注意是arm版本,frp_0.34.3_linux_arm

windows下载的是:frp_0.37.0_windows_amd64

ros下载的是:也是arm版本。frp_0.41.0_linux_arm.tar.gz

在linux上可以通过uname -a查看是amd还是arm版本。如果是aarch64就是ARM架构。 下图为ros:

  • Windows下载文件存放位置

frp的linux_amd版本放在:D:\Program\frp\frp-linux ,该版本通常用于阿里云服务器

frp的windows版本放在:D:\Program\frp\frp_0.37.0_windows_amd64

frp的linux_arm版本放在:D:\Program\frp\frp-linux-arm,该版本通常用于树莓派或者ros机器人系统

  • 相关教程

曾经的ECS服务器,公网47.113.98.18

树莓派使用frp实现内网穿透 | 树莓派小无相系列 这篇成功了

https://www.jianshu.com/p/a921e85280ed

如果没有公网ip,但又想随时随地都能连接到树莓派,我们可以使用 frp 来实现。

通过代理实现在校园外使用校园网内的服务 (frp内网穿透) 这两篇结合我成功了

https://www.cnblogs.com/FSHOU/p/12382155.html

树莓派搭建个人服务器

https://www.cnblogs.com/zhaopei/p/11736135.html

随笔分类 - frp

https://www.cnblogs.com/sanduzxcvbnm/category/1171545.html

树莓派使用frp进行内网穿透

https://www.jianshu.com/p/6eff8b8c493a

wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz

tar -zxvf frp_0.17.0_linux_amd64.tar.gz

cd frp_0.17.0_linux_amd64

nano frps.ini

买了一台云服务器到底能干嘛? - 药师的回答 - 知乎 https://www.zhihu.com/question/27205559/answer/772271922

x86,x64,x86-64,amd64,arm指令集架构之间的关系 - 知乎 (zhihu.com)

三、树莓派实现内网穿透

(一)在服务端(阿里云服务器ubuntu)配置frps

步骤1,到GitHub下载frp_0.34.3_linux_amd64,然后通过xftp传送到阿里云。注意linux下载的是amd64.wget

https://github.com/fatedier/frp/releases

https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz

网上有直接在linux或者树莓派直接命令行下载的方法,但很慢不推荐。

cd /home/huang/frp

wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz

步骤2,找到下载的文件夹,

cd /opt#

tar -zxvf frp_0.22.0_linux_amd64.tar.gz

解压tar -zxvf frp_0.34.3_linux_amd64.tar.gz

步骤3,可以直接用ftp进入到frp_0.34.3_linux_amd64目录或者命令行到/home/huang/frp/frp_0.22.0_linux_amd64进行修改,找到frps.ini。注意服务端是frps,客户端时frpc。vi frps.ini修改

步骤4,修改frps.ini 内容,保存即可。token是自定义的,port记得在阿里云安全组开放端口。

[common]

bind_port = 7000

token = 1234567890

5,在xshell里面cd /opt/frp_0.34.3_linux_amd64

#请确保在 frp_0.34.3_linux_amd64 目录下运行

./frps -c ./frps.ini

启动frps。完成配置。

(二)在树莓派配置frpc

1,下载frp_0.34.3_linux_arm。注意是arm不是amd64。

2,在vnc打开/home/pi/Downloads。解压tar -zxvf frp_0.34.3_linux_arm

3,进入frp_0.34.3_linux_arm目录,修改frpc.ini文件。

[common]

server_addr = 47.113.98.18

server_port = 7000

token = 1234567890

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 6000

[vnc]           

type = tcp

local_ip = 127.0.0.1

local_port = 5900

remote_port = 6001

[camara]               

type = tcp

local_ip = 127.0.0.1

local_port = 8081

remote_port = 6003

4,在xshell中,cd /home/pi/Downloads/frp_0.34.3_linux_arm

./frpc -c ./frpc.ini

树莓派开机自启动frpc

https://www.cnblogs.com/hxun/p/10877828.html

frpc.service

sudo systemctl enable frpc

sudo systemctl enable frpc

sudo systemctl start frpc

查看服务是否生效

sudo systemctl list-units |grep frpc

查看日志信息 sudo systemctl status frpc

#刷新服务列表:

systemctl daemon-reload

#设置开机自启

systemctl enable frpc

#关闭开机自启

systemctl disable frpc

#启动服务

systemctl start frpc

#停止服务

systemctl stop frpc

#下载程序

wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz

frp进行内网穿透 给云服务器进行内网穿透

https://blog.****.net/qq_36552489/article/details/111560871?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase

github谷歌插件

https://github.com/XIU2/UserScript

github release文件下载

有的时候下载一些软件,这些软件是放在github上的,而由于国内的github网速非常慢,所以可以采用代理的方式

github下载release文件:https://d.serctl.com

可以使用这个网站

原来的frp

[common]

server_addr = 127.0.0.1

server_port = 7000

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 6000

四、通过内网穿透实现ipad远程连接windows电脑

前提条件:windows要用专业版,不然没有远程功能。开放电脑的3389端口,并允许远程电脑的连接。阿里云服务器需要开放对应的端口的访问权限。ipad下一个RD client,然后,阿里云服务器配置好frps,windows电脑配置好frpc,之后出门打开寝室的电脑连上路由器,并运行frpc。远程ipad输入阿里云ip+端口号即可远程访问电脑。

(一)阿里云服务器配置frps

教程:https://blog.****.net/haofanaaa2/article/details/112710963

步骤1:下载frp的linux_amd64版本

可以用指令wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz实现,

或者从github下载后使用xftp上传至服务器,下载地址为:Releases · fatedier/frp (github.com)

步骤2:cd /home/huang/frp/frp_0.22.0_linux_amd64,解压:tar -zxvf frp_0.22.0_linux_amd64.tar.gz

步骤3:解压之后,我们主要需要对frps进行配置。frpc frpc.ini 这两个文件没有用,是可以删去的。

我们来配置frps.ini文件 vi frps.ini或者在软件xftp上直接记事本打开。

[common]

bind_port = 7000

dashboard_port = 7001

token = 123456

dashboard_user = huang

dashboard_pwd = 123456

然后:wq退出保存即可,之后./frps -c frps.ini就可以运行frps服务端了,屏幕显示如下即为运行正常

步骤4:使用nohup指令使之后台运行:nohup ./frps -c frps.ini &,因为如果Ctrl+C可将frps停止运行,因而我们需要使用 nohup命令将其运行在后台。输出如下内容即表示正常运行:nohup: ignoring input and appending output to 'nohup.out'。用jobs命令查看后台运行的程序会看到。

步骤5:服务器端frps的配置成功之后,可以看dashboard且可以看token对应了。此时访问x.x.x.x(你的ip地址或域名):7500输入之前设置的dashboard_userdashboard_pwd即可访问仪表盘界面。我的是http://8.136.195.245:7500/

(二)Windows配置frpc

步骤1:下载windows版本的frp,存放路径为:D:\Program\frp\frp_0.37.0_windows_amd64

步骤2:在win10上需要修改配置文件frpc.ini,网上有千奇百怪的写法,需要依照自身的配置情况进行相应修改。

以下是一个成功的配置代码,token要写token而不能写auto_token。下面那个username 3390端口是远程连接的配置。且需要在阿里云开放3390端口。作用就是把默认的远程端口的3389映射到阿里云ip的3390端口,这样就可以通过外网ip远程访问。(Windows系统自带了远程桌面连接【Win+R 运行,输入mstsc 打开】,也非常好用,系统自带远程服务默认端口是【3389】)

[common]
server_addr = 8.136.195.245
bind_port = 7000
token = 123456
tls_enable = true

[username]

type = tcp

local_ip = 127.0.0.1

local_port = 3389

remote_port = 3390

步骤3:保存后在此路径下cmd运行下.\frpc.exe -c frpc.ini,输出为下图即成功

D:\Program\frp\frp_0.37.0_windows_amd64\frpc.exe -c D:\Program\frp\frp_0.37.0_windows_amd64\frpc.ini

步骤4:开启frpc功能需要联网,通常使用室内路由器,开机自动连接wifi。 如果win10没有写自启动的命令,那么需要有人通过终端执行命令开启frpc。这样才能让ipad远程连接上win10电脑。

在电脑上先win+R,输入cmd,在命令行输入:

D:\Program\frp\frp_0.37.0_windows_amd64\frpc.exe -c D:\Program\frp\frp_0.37.0_windows_amd64\frpc.ini

如果出现login to server success字样就表明成功了。

(ps:该指令我已经用记事本记录下,放在电脑桌面,如果有需要可以让人帮人执行下该命令。每次重启电脑都需要重新执行该命令。)

问题:frpc客户端连接会提示 login to server failed: EOF;解决办法:在frpc的配置文件加一句:tls_enable = true

(三)阿里云ubuntu FRP 设置开机自启动

位置是这篇说的位置/lib并不是/usr/lib

https://www.tunnelnat.com/help.html?id=19

按照下面这篇成功了

https://blog.****.net/weixin_34208185/article/details/88940402?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control

我们使用 ubuntu Linux下常用的进程管理器supervisor来管理FRP服务。

安装systemd请运行:

apt-get update

apt-get install systemd

apt-get install systemd-sysv

# 启动 frp 并设置开机启动 每次开机后输入第二条语句即可,第三条查看状态

systemctl enable frps

systemctl start frps

systemctl status frps

------------------------------------------------------------

linux阿里云服务器centos8操作系统安装mysql8.0详细教程

https://blog.****.net/qq_41688840/article/details/104699628

用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理

https://blog.****.net/dabao87/article/details/80571877

--------------------------

一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、http等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等……,并带有功能强大的web管理端。

https://github.com/ehang-io/nps

五、ROS机器人内网穿透

ros机器人内网穿透的目的:ros机器人提供了AP模式和wifi模式,我使用的是wifi模式,这就要求电脑和ros需要连接到同一个wifi时,才能通过ssh连接到ros系统。一般情况这个共同wifi是路由器或者手机热点。由于有时候人带着手机出门,电脑的xshell就会断网从而xshell的连接也就断开了。为了让电脑或手机的ssh工具在不连接同一个wifi的情况下,即可通过ssh工具连接到ros机器人系统中,那么就需要内网穿透,将ros的ssh和vnc端口映射到阿里云服务器的外网ip端口上,我就可以直接使用外网ip连接到ros。ros机器人经常开机关机,每次重启都需要手动运行frpc,于是有需要通过配置开机自启动service让frpc能够在开机的时候自动执行。

(一)阿里云服务器上配置frps

步骤1:下载frp的linux_amd版本

frp下载地址:Releases · fatedier/frp (github.com)

frp的linux版本放在:D:\Program\frp\frp-linux-amd64,文件名为frp_0.41.0_linux_amd64.tar.gz

步骤2:解压tar -zxvf frp_0.41.0_linux_amd64.tar.gz

步骤3:配置frps.ini。cd /home/huang/frp/frp_0.22.0_linux_amd64

[common]
bind_port = 7000
dashboard_port = 7001
token = 123456
dashboard_user = huang
dashboard_pwd = 123456

然后:wq退出保存即可,之后./frps -c frps.ini就可以运行frps服务端了,屏幕显示如下即为运行正常

步骤4:使用nohup指令使之后台运行:nohup ./frps -c frps.ini &,因为如果Ctrl+C可将frps停止运行,因而我们需要使用 nohup命令将其运行在后台。输出如下内容即表示正常运行:nohup: ignoring input and appending output to 'nohup.out'。用jobs命令查看后台运行的程序会看到。

步骤5:服务器端frps的配置成功之后,可以看dashboard且可以看token对应了。此时访问x.x.x.x(你的ip地址或域名):7500输入之前设置的dashboard_userdashboard_pwd即可访问仪表盘界面。我的是frps dashboard

查看某个端口占用:netstat -ap | grep 7001

frp用一个服务器进程frps连接多个客户端frpc - wangyuyu - 博客园 (cnblogs.com)

(二)ROS机器人系统中配置frpc

步骤1:下载frp的linux_arm版本。

github上的下载路径为:https://github.com/fatedier/frp/releases/download/v0.41.0/frp_0.41.0_linux_arm.tar.gz

电脑端的已下载文件的存放路径:D:\Program\frp\frp-linux-arm,文件名为frp_0.41.0_linux_arm.tar.gz

机器人端的存放路径为:cd /home/bingda/hrobot/frp

步骤2:解压 tar -zxvf frp_0.41.0_linux_arm.tar.gz

步骤3:配置frps。cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm,tls_enable = true是为了解决登录eof的问题(一开始是在ipad远程连接win10报错),login_fail_exit = false。11311是默认的app控制端口,映射到7004.

[common]
server_addr = 42.192.80.10
bind_port = 7000  
token = 123456 
tls_enable = true 
login_fail_exit = false

[ssh_robot]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7002

[vnc_ros]
type = tcp
local_ip = 127.0.0.1
local_port = 4000
remote_port = 7003

[app_control]
type = tcp
local_ip = 127.0.0.1
local_port = 11311
remote_port = 7004


步骤4:在xshell中,cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm

输入命令./frpc -c ./frpc.ini

nohup ./frpc -c ./frpc.ini &

(三)ROS机器人中让frpc开机自启动

树莓派4B 开机自启实现Frpc 内网穿透连接,linux延时启动服务详细介绍实现_-****博客

步骤1: Ubuntu 18 不再使用initd管理系统,而是使用systemd。新建一个service用于开启frpc服务。

cd /etc/systemd/system
sudo touch rosfrpc.service
sudo vim rosfrpc.service

以下为rosfrpc.service的内容
[Unit]
Description=rosfrp
After=network.target
Wants=network.target

[Service]
TimeoutStartSec= 30
ExecStart=/home/bingda/hrobot/frp/frp_0.41.0_linux_arm/frpc -c /home/bingda/hrobot/frp/frp_0.41.0_linux_arm/frpc.ini
Restart=1

[Install]
WantedBy=multi-user.target

After=network.target和Wants=network.target意思是这个服务在网络环境下启动,然而测试发现并没有什么用。

步骤2:开启、关闭、重启service的相关指令,以及查看service运行状态的指令。

sudo service rosfrpc start     启动service。输入该指令后还需输入密码
sudo service rosfrpc stop  
sudo service xxx status
sudo service rosfrpc restart
sudo systemctl start rosfrpc.service   启用service的另一种指令

systemctl status rosfrpc.service    查看service运行状态。当执行出现错误,可以用该指令查看何处出错
service rosfrpc status  查看service运行状态

如果运行成功,会显示为active。

步骤3:启动frpc的service服务写好后,我们自己手输命令是能够成功运行的。但是这样就需要每次开机都手动输一次命令,较为繁琐。因此可以通过sudo systemctl enable rosfrpc.service让该service开机自启动。

步骤4:正常而言,到步骤3已经完成frpc的开机自启动。因为我的ros机器人是设置了开机自动连接手机热点,只有当机器人联网后,我才通过xshell输入外网ip进入ros机器人系统中。这是因为我经常让ros机器人使用我的手机热点,其连接速度很快。

(特殊情况,是我从树莓派内网穿透那边得到的经验,由于要成功开启frpc服务需要ros机器人先联网,所以开机时热点未连上,就先开启了service服务,那么自启动服务就无法生效。网上的解决办法是再写一个脚本,让ros系统延迟60s再开启service服务。依照2022年4月7日的情况,我觉得应该是配置到步骤3即可完成。为了以后出问题有得查询,特此做了记录。)

cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm
touch delaystartfrpc.sh
sudo vim delaystartfrpc.sh

以下为脚本内容,就两行

sleep 60
service rosfrpc start

sudo service --status-all  查看全部服务列表
systemctl reboot   重启机器

修改指定位置文件sudo vim /etc/rc.local,添加我们的命令,注意位置,在exit 0前面的命令都会被顺次执行。
_IP=$(hostname -I)||true
if["$_IP"]; then
  printf "My IP address is %s\n" "$_IP"
fi
/home/bingda/hrobot/frp/frp_0.41.0_linux_arm/delaystartfrpc.sh
exit 0

(四)问题处理

2022.04.06 我用自己的阿里云服务器跑frps出现了bug,无法成功执行,而我在去年用同样的命令成功了,可能是期间服务器到期又续费造成的一些问题,之后有时间再排查。而同样的frps配置,在同学的腾讯云服务器上可以运行,说明配置文件本身没问题,确实是我的服务器出了意外。

同学ip:42.192.80.10

cd /root/frp/frp_0.41.0_linux_amd64

2022.04.06

ipad远程连接windows时,windows开启frpc服务时报EOF错误,可以在frpc.ini文件中的[common]中添加一句tls_enable = true。

2022.04.14解决问题

解决:阿里云服务器添加安全组端口映射后仍无法访问_wshanshi的博客-****博客_阿里云配置安全组还是无法访问的

阿里云开放端口后,外部还无法访问,问题就在于没有开放防火墙。

firewall-cmd --list-all

firewall-cmd --zone=public --add-port=7500/tcp --permanent 开放某个端口

firewall-cmd --reload 重新启用防火墙

添加之后,我的frp的dashboard就可以正常启用了。

在Ubuntu 18.04/Ubuntu 16.04上安装Firewalld的方法

在Ubuntu 18.04/16.04系统上安装和使用Firewalld的方法_Linux安全_云网牛站 (ywnz.com)

Ubuntu系统的默认防火墙系统是ufw(参考:在Ubuntu 18.04系统中使用UFW设置防火墙),但是可以安装和使用Firewalld,Firewalld对我来说很好,因为我以前是一个CentOS 7用户。

通过运行命令在Ubuntu 18.04/Ubuntu 16.04上安装Firewalld:

sudo apt-get install firewalld

默认情况下,应该启动服务,如果没有运行,则启动并启用它以在启动时启动:

sudo systemctl enable firewalld

sudo systemctl start firewalld

确认该服务正在运行:

$ sudo firewall-cmd --state

running

如果已启用ufw,请将其禁用以使firewalld成为你的默认防火墙:

sudo ufw disable

原文地址:https://www.cnblogs.com/Mystogan/p/16144781.html