内网穿透工具frp,有需要的人肯定已经了解它是什么了,不知道的可以去官网看下:
这块网上其实已经有相当多的文章进行过阐述了,这里就简单说一些我的理解。
首先需要明确角色:
内部服务
的人如果内部服务这台主机在公网上可以直接访问得到,那么用户就可以直接过去访问,就没有frp什么事情了。但很多情况就是如此不尽如人意,某些服务和主机就是隐藏在一些内部私有的网络里面的,在公网上是没办法直接访问的。
这时候就需要在公网的主机上安装frp服务端程序,作为一个大家的目标(后续用户和frp客户端都会主动连接到这台主机上,这个主机是双向标的)。用户连接上来是为了访问内部服务,而frp客户端连接上来,则是为了告知frp服务端,内部服务到底在哪里。因为处于内网的服务,frp服务端也不能主动得知,必须frp客户端主动连接上去告知服务端,我在这里。
上面是一些比较感性的理解,具体的可以看图(注意图上的s
和c
,frps就是刚才说的frp服务端,而frpc则是frp客户端):
安装分为服务端和客户端两部分。frp在大部分的linux发行版本上都是没有的,所以一般需要直接从github上下载release包,具体可以到这里查看。
下面的例子都以ubuntu为例,应用场景都是:
用户 => frp服务端(公网) => frp客户端(私有网络) => 目标内部主机ssh(私有网络)
$ uname -m
x86_64
$ wget https://github.com/fatedier/frp/releases/download/v0.34.1/frp_0.34.1_linux_amd64.tar.gz
$ tar zxvf frp_0.34.1_linux_amd64.tar.gz
$ rm ./frp_0.34.1_linux_amd64.tar.gz
$ mv -f ./frp_0.34.1_linux_amd64 ./frp
$ cd frp
$ vim frps.ini
bind_port = 7000
token = some_secret_string
dashboard_port = 7500
dashboard_user = user_name
dashboard_pwd = user_password
说明:
接下来创建ubuntu的开机启动和daemon控制:
$ sudo vim /etc/systemd/system/frps.service
填写内容:
[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/path_to_frp/frps -c /path_to_frp/frps.ini
Restart= always
RestartSec=1min
ExecStop=/usr/bin/killall frps
[Install]
WantedBy=multi-user.target
启动、设置开机启动、重启,三个命令:
$ sudo systemctl start frps
$ sudo systemctl enable frps
$ sudo systemctl restart frps
$ uname -m
x86_64
$ wget https://github.com/fatedier/frp/releases/download/v0.34.1/frp_0.34.1_linux_amd64.tar.gz
$ tar zxvf frp_0.34.1_linux_amd64.tar.gz
$ rm ./frp_0.34.1_linux_amd64.tar.gz
$ mv -f ./frp_0.34.1_linux_amd64 ./frp
$ cd frp
$ vim frpc.ini
[common]
server_addr = some_ip
server_port = 7000
token = some_secret_string
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
说明:
frpc的local_port
应该映射到frps主机上的哪个端口号
,也就是最终用户ssh登录时使用的端口号仍旧需要创建ubuntu的开机启动和daemon控制:
$ sudo vim /etc/systemd/system/frpc.service
填写内容:
[Unit]
Description=frpc daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/path_to_frp/frpc -c /path_to_frp/frpc.ini
Restart= always
RestartSec=1min
ExecStop=/usr/bin/killall frpc
[Install]
WantedBy=multi-user.target
启动、设置开机启动、重启,三个命令:
$ sudo systemctl start frpc
$ sudo systemctl enable frpc
$ sudo systemctl restart frpc
最终用户ssh登录的时候,使用的命令如下:
$ ssh -v -p 6000 user@frps_ip
EOF