免费frp内网穿透服务器_阿里解析内网穿透

免费frp内网穿透服务器_阿里解析内网穿透本文主要介绍在阿里云服务器上实现frp内网穿透,并配置多个客户端,最后通过配置安全组规则解决connectiontimeedout错误。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

更多精彩内容请访问我的新博客站点

前言

前几天在一台具有公网IP的 vultr 云服务器上实现了 frp 内网穿透(参考链接),可以从寝室 ssh 登录到教研室的服务器,但是由于 vultr 的云服务器位于国外的节点,连接速度太慢了,导致连接 ssh 登录的体验很差。今天又弄了一台阿里云的云服务器 ECS,所以现在来介绍如何在阿里云上实现 frp 内网穿透。

配置 ssh 访问内网机器

之前使用的 vultr 的VPS是 CentOS 系统的,这次阿里云服务器是 Ubuntu 的操作系统,但其实不同操作系统的云服务器在使用 frp 时操作都是一样的,就是下载配置运行。可能有区别的地方就是防火墙相关的配置,不同云服务厂商的镜像不同可能也有一些差别。下面来说明在阿里云的公网服务器的 frp 实现步骤:

下载

在阿里云的公网服务器和内网机器上都要下载安装包并解压:

$ wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz
$ tar -xzvf frp_0.21.0_linux_amd64.tar.gz

解压之后的文件夹中既包含了服务端的文件又包括客户端的文件,所以可以分别在两个机器上删除掉不必要的文件,也可以不删,都没有影响。强迫症还是来删一下,在解压后的文件夹中:

  • 在公网服务器上删除客户端相关的文件,只保留一下两个文件:

    frps  frps.ini
    
  • 在内网机器上删除服务端相关的文件,只保留以下两个文件:

    frpc   frpc.ini
    

配置

就是需要修改配置文件 frps.inifrpc.ini

  • 修改公网服务器上的服务端配置文件 frps.ini,如下:

    [common]
    bind_port = 7000  #frp服务端端口(必须)
    
  • 修改内网目标主机的客户端配置文件 frpc.ini,如下:

    [common]
    server_addr = xxx.xxx.xxx.xxx   #frp服务端地址,必须是公网ip或者域名,这里假设为xxx.xxx.xxx.xxx
    server_port = 7000      #frp服务端端口,即填写服务端配置中的 bind_port
    
    [ssh]
    type = tcp              #连接类型,填tcp或udp
    local_ip = 127.0.0.1    #填127.0.0.1或内网ip都可以
    local_port = 22         #需要转发到的端口,ssh端口是22
    remote_port = 6000      #frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访
                            #问客户端的 local_port,如果填0则会随机分配一个端口
    

运行

  • 在公网服务器上运行服务端程序:

    $ nohup ./frps -c frps.ini &
    

    查看 nohup.out 的信息,success

    $ tail -f nohup.out
    2018/09/17 21:34:01 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
    2018/09/17 21:34:01 [I] [root.go:207] Start frps success
    2018/09/17 22:06:02 [I] [service.go:319] client login info: ip [125.71.229.32:60516] version [0.21.0] hostname [] os [linux] arch [amd64]
    2018/09/17 22:06:02 [I] [proxy.go:217] [7940291c148c2fca] [ssh] tcp proxy listen port [6000]
    2018/09/17 22:06:02 [I] [control.go:335] [7940291c148c2fca] new proxy [ssh] success
    
  • 在内网目标主机上运行客户端程序:

    $ nohup ./frpc -c frpc.ini &
    

    查看 nohup.out 的信息,success

    $ tail -f nohup.out
    2018/09/17 22:42:22 [I] [proxy_manager.go:300] proxy removed: []
    2018/09/17 22:42:22 [I] [proxy_manager.go:310] proxy added: [ssh1]
    2018/09/17 22:42:22 [I] [proxy_manager.go:333] visitor removed: []
    2018/09/17 22:42:22 [I] [proxy_manager.go:342] visitor added: []
    2018/09/17 22:42:23 [I] [control.go:246] [0624b332c3465118] login to server success, get run id [0624b332c3465118], server udp port [0]
    2018/09/17 22:42:23 [I] [control.go:169] [0624b332c3465118] [ssh1] start proxy success
    

配置多个内网主机

错误的多客户端配置

使用一台阿里云的公网服务器,我们可以配置很多内网机器的 frp 内网穿透,公网服务器上只需要按照上述的配置一次即可,但是内网机器的配置稍有不同,如果使用了一样的配置则后添加的内网机器是无法连接上公网服务器的。这里假设另一台内网机器2的 frpc.ini 配置如下,来说明会遇到的问题:

$ vi frpc.ini
[common]
server_addr = xxx.xxx.xxx.xxx  <==这里还是按照上面的假设,公网服务器的ip为xxx.xxx.xxx.xxx
server_port = 7000

[ssh]
type = tcp 
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001     <==remote_port设置为另一个值

两个内网主机的配置除了 remote_port 不一样之外,都是一样的。但是在内网机器2上运行 frpc 后,公网服务器的 nohup.out 中会记录一下的错误:

[W] [control.go:332] [280d36891a6ae0c7] new proxy [ssh] error: proxy name [ssh] is already in use

后来发现,frp 中是通过 [ssh] 这个名字来区分不同客户端的,所以不同的客户端要配置成不同的名字。

正确的多客户端配置

内网机器1和内网机器2的配置应该区分如下:

内网机器1:
[ssh]                      <==不同点
type = tcp 
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000         <==不同点

内网机器2:
[ssh1]                     <==不同点
type = tcp 
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001         <==不同点

在两个内网机器上分别运行 frpc 客户端程序后,一般就可以通过以下的方法 ssh 登录:

内网机器1:
$ ssh -p 6000 user_name1@server_addr

内网机器2:
$ ssh -p 6001 user_name2@server_addr

以上参数中,server_addr是公网服务器的公网ip;user_name1、user_name2 分别是内网机器1、2的用户名,之后分别使用登录密码就可以登录。


connection timed out 解决

但是有时候会发现按照以上的配置还是使 frp 的服务端与客户端建立连接,在客户端上会出现以下错误:

2018/09/17 22:02:23 [W] [control.go:113] login to server failed: dial tcp xxx.xxx.xxx.xxx:7000: connect: connection timed out
dial tcp xxx.xxx.xxx.xxx:7000: connect: connection timed out

仔细检查了一下云服务器上面的防火墙设置,发现并没有任何过滤规则,那应该不是防火墙的问题

# iptables -vnL
Chain INPUT (policy ACCEPT 46165 packets, 28M bytes)
 pkts bytes target     prot opt in     out     source               destination         

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

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

然后又仔细想了一下我以前在做关于 OpenStack 的项目中也碰到了类似的问题,就是创建了云实例,发现无法通过 ssh 来登录,就是因为 OpenStack 有安全组规则相关的设置。

想到了这里就有一种熟悉的感觉,还是原来的配方,hahaha。。。

登录到阿里云对应云服务器的管理控制台,如下找到左上方的本实例安全组:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tun0BAfr-1612859329577)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20instance%20info.jpg)]

然后点击右上角的配置规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ZhP1IfJ-1612859329578)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20group%20rules.jpg)]

再点击右上角的添加安全组规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKvNLe1q-1612859329579)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20groups%20rules%20setting.jpg)]

最后在添加安全组规则的界面添加相应的规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkx1nfaH-1612859329581)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20group%20rules%20adding.jpg)]

主要有两个配置项,端口范围和授权对象

  • 端口范围就是你要开放的端口的范围,需要将 server_portremote_port 都添加进去,可以分成两条规则分别添加;
  • 授权对象是你要授权的对象,一般设为 0.0.0.0/0 表示允许所有IP的访问。

以上就是针对阿里云的云服务器的安全组设置,其他厂商如果有安全组规则也应该是类似的。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197570.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月1日 上午11:43
下一篇 2025年9月1日 下午12:15


相关推荐

  • 基于POI实现Excel表的导入导出功能[通俗易懂]

    基于POI实现Excel表的导入导出功能[通俗易懂]对于批量数据的操作,在项目中引进Excel的导入和导出功能是个不错的选择。对于Excel表的结构,简单理解可以把它分成三部分(Sheet,Cell,Row),这三部分可以理解为excel表中的页,列,行。因此,我们想要获取到某一个单元的内容,可以通过获取该单元所在的页数、对应所在的行和对应的列数从而定位到该单位,继而便可执行操作从而获取其中的内容。本文在SSM环境下基于Java的POI实现对exc…

    2025年7月1日
    4
  • Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略

    Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略源码简介 ThreadPoolEx 是 JDK 中的线程池实现 这个类实现了一个线程池需要的各个方法 它实现了任务提交 线程管理 监控等等方法 来看看 ThreadPoolEx 类的构造方法源码 其他创建线程池的方法最终都会导向这个构造方法 共有 7 个参数 corePoolSize maximumPoolS keepAliveTim unit workQueue threadFactor handler 下面将对这 7 个参数展开讲解 publicThread

    2026年3月18日
    2
  • qsettings删除注册表_QSettings使用方法

    qsettings删除注册表_QSettings使用方法一 QSettings 介绍 用户通常希望应用程序记住其设置 在 windows 中 这些设置保存在注册表中 ios 在属性文件列表中 而 unix 在缺乏标准的情况下 其存储在 ini 文本中 QSettings 有两种存储格式 QSettings NativeFormat 在 windows 平台可读写注册表 QSettings IniFormat 读写 ini 文件 QSettings InvalidF

    2025年10月18日
    5
  • Java对象中等待(wait)和通知(notify)

    Java对象中等待(wait)和通知(notify)JDK 在 Object 对象中提供了 2 个非常重要的接口线程方法 wait 方法和 notify 方法 也就是所有 Java 对象都有这 2 个方法 意思就是当在一个实例 Java 对象上调用 wait 方法 那么当前线程就会从执行状态转变成等待状态 同时释放在实例对象上的锁 直到其它线程在刚才那个实例对象上调用 notify 方法并且释放实例对象上的锁 那么刚才那个当前线程才会再次获取实例对象锁并且继续执行 这样我们

    2026年3月16日
    2
  • java数字转字符串的三种方式

    java数字转字符串的三种方式方式一 强制转换 inti 2018 Strings1 String i 方式二 通过包装类进行转换 inti 2018 Strings1 String valueOf i 方式三 通过数字加空字符串转换 inti 2018 Strings1 i

    2026年3月26日
    3
  • 黑盒测试用例编写八大方法

    黑盒测试用例编写八大方法测试用例定义(8要素)测试用例实例什么是黑盒测试只能看见输入输出,不知道被测系统具体实现,仅仅知道对外接口通过输入输出测试常见黑盒测试方法(8个测试方法)等价类测试方法计算机0-100数字计算,要实现加法,最笨的方法是要两两相加,一旦数据多了就很难完成定义:在所有测试数据中(有满足要求的也有不满足要求的),挑选出具有某种共同特征的数据子集(把所有数字进行分类,可以根据需求来分,要求是0-100,满足要求的是一类,不满足要求的是一类)线性情况:像0-100数据线性增加word修

    2022年6月10日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号