Linux服务器所以Frp实现内网穿透(阿里云Ubuntu)

Linux服务器下Frp实现内网穿透(阿里云Ubuntu)

有时候我们需要让内网的服务器允许访问,但是自己内网家庭常用带宽,我发直接访问IP,所以我们只能进行内网穿透,使用花生壳等软件是付费的,所以我们选择了frp作为内网穿透工具,配置如下,你需要的东西有:

  • 公网服务器,具有外网IP(如阿里云,腾讯云等服务器)
  • 内网服务器,能联网即可。

一、下载Frp项目

分别下载frp到公网服务器和内网服务器:

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

然后解压并进入服务器,

tar zxvf ./frp_0.25.0_linux_amd64.tar.gz
cd frp_0.25.0_linux_amd64/

# 目录内容如下
# LICENSE  frpc  frpc.ini  frpc_full.ini  frps  frps.ini  frps_full.ini

二、配置公网服务器

进入公网IP服务器中修改目录中的frps.ini配置文件, 将bind_port改为随意可用端口

[common]
bind_port = 7000

三、修改内网服务器

在内网IP服务器中修改frpc.ini配置文件:

[common]
server_addr = 123.123.123.123
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

其中解释如下:

  • common表示基本配置
    • server_addr:公网服务器地址
    • server_port:公网bind_port配置的端口
  • ssh表示使用ssh登录内网服务器
    • type:tcp即可
    • local_ip:本地iP,127.0.0.1即可
    • local_port: ssh端口
    • remote_port:ssh链接端口

四、分别启动内网公网服务器FRP

1、在公网服务器中启动frps服务端:

为了方便调试,我们先启动桌面版:

cd frp_0.25.0_linux_amd64/
./frps -c ./frps.ini
nohup ./frps -c ./frps.ini &

# 链接成功会出现如下内容
# 2019/03/19 16:41:16 [I] [service.go:88] frps tcp listen on 0.0.0.0:7000
# 2019/03/19 16:41:16 [I] [main.go:112] Start frps success
# 2019/03/19 16:41:16 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues

生产使用中可使用如下命令在后台运行:

nohup ./frps -c ./frps.ini > /dev/null 2>&1 &

2、在内网服务器中启动frpc客户端:

公网服务器启动成功后,在内网服务器中启动frpc,为了方便调试,我们一样启动桌面版:

cd frp_0.25.0_linux_amd64/
./frpc -c ./frpc.ini
nohup ./frpc -c ./frpc.ini &

# 链接成功会出现如下内容
# 2019/03/19 17:43:44 [I] [control.go:276] [f094394cf61f02fe] login to server success, get run id [f094394cf61f02fe]
# 2019/03/19 17:43:44 [I] [control.go:411] [f094394cf61f02fe] [ssh] start proxy success

生产使用中可使用如下命令在后台运行:

nohup ./frpc -c ./frpc.ini > /dev/null 2>&1 &

五、ssh登录服务器

如果配置成功,在进入本地服务器就相对容易了,与以前的ssh一样:

ssh root@公网IP -p 6000

也可以使用

ssh -oPort=6000 test@公网IP

六、常见问题与解决方案

1、内网服务器无法连接frpc客户端:

此问题一般情况是公网IP没有开放bind_port设置的7000端口,此时可以检查防火墙是否允许以及查看服务器安全规则,如阿里云需要设置安全组规则允许访问。

2、ssh无法使用内网账号密码登录,只能使用公网密码登录

ssh无法使用内网账号密码登录,只能使用公网密码登录;一登录直接跳转到外网服务器,没有实现穿透效果,此时需要设置内网服务器frpc.ini文件,修改local_ip = 127.0.0.1

3、ssh无法登录到frp服务器,提示超时

此问题的原因是公网未开放ssh配置的端口,开放一下即可,如我的是阿里云,ssh端口为6000,我去阿里云安全组规则允许访问6000端口才搞定。

4、tcp拨号提示超时

2020/09/22 10:55:42 [W] [service.go:82] login to server failed: dial tcp xx.xx.xx.xx:7000: connect: connection timed out
dial tcp xx.xx.xx.xx:7000: connect: connection timed out # 检查阿里云的安全组规则与宝塔的开放端口

更多信息:

安全地暴露内网服务

对于某些服务来说如果直接暴露于公网上将会存在安全隐患。

使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc。

以下示例将会创建一个只有自己能访问到的 ssh 服务代理。

frps 的部署步骤同上。

  1. 启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
  1. 在要访问这个服务的机器上启动另外一个 frpc,配置如下:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = secret_ssh
sk = abcdefg
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6000
  1. 通过 ssh 访问内网机器,假设用户名为 test:
ssh -oPort=6000 test@127.0.0.1

如果出现问题:

[secret_ssh_visitor] start error: listen tcp 127.0.0.1:6000: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

将本地地址改为127.0.0.2或者其他地址

设置bat文件,这样就不需要每次都定位到指定目录:

cd C:\Users\JChan\Desktop\frp_0.25.0_windows_amd64\frp_0.25.0_windows_amd64
start /b frpc -c frpc.ini
posted @ 2020-09-10 01:36  xlchan  阅读(3987)  评论(1编辑  收藏  举报