使用frp进行内网穿透

之前使用花生壳来进行内网穿透,只能穿透一个,相当于没有,然后发现了frp这个神仙项目。

frp可以通过一个有公网IP的服务器来进行转发,服务器启动frps,内网机器启动frps,然后就可以访问内网机器啦。

搭建过程

硬件条件

Jetson Nano B01 ,阿里云服务器一台,域名一个。

下载frp

首先下载frp项目,https://github.com/fatedier/frp/releases,阿里云服务器应该是要下载frp_0.36.2_linux_amd64.tar.gz,然后解压。Jetson nano需要下载frp_0.36.2_linux_arm.tar.gz,然后解压。

观察frp配置文件

里面一共有一个systemd文件夹和frpc、frpc.ini、frpc_full.ini、frps、frps.ini、frps_full.ini。systemd先不用管,后面才会用到。

其中frpc和frps是两个启动程序。其余四个ini分别是启动程序的简单配置例子和详细配置例子。

实现ssh

如果要实现ssh ,服务器和内网机器分别要进行以下配置。

服务器需要配置frps.ini文件,其实不用变哈哈,本来就是这样。

1
2
[common]
bind_port = 7000

然后内网机器需要进行一哈配置frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[common]
#这个是服务器的公网IP地址
server_addr = 127.0.0.1
#这个是服务器的监听端口,需要和服务器配置文件中的bind_port相同
server_port = 7000

#下面的ssh配置
[ssh]
#类型是tcp
type = tcp

#本地ip地址,可以是192.168.1.xxx这种,如果是127.0.0.1就是本机
local_ip = 127.0.0.1

#本地端口
local_port = 22

#服务器端口,我们连接的时候连接服务器的6000端口就好了
remote_port = 6000
实现http

服务器的frps.ini配置

1
2
3
4
5
[common]
bind_port = 7000

#表示用10000来监听http
vhost_http_port = 10000

本地的frpc.ini配置

1
2
3
4
5
6
7
8
9
10
11
12
13
[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 10000
custom_domains = 你的域名1或者ip地址

[web2]
type = http
local_port = 100001
custom_domains = 你的域名2或者ip地址

因为每个web中的custom_domains都必须不同,如果直接写服务器的公网ip的话,只能实现一个http的转发,如果你有域名的话,是可以创建很多子域名,因此可以实现很多http转发。只需要在本地机器的frpc.ini中增加local_port和custon_domains即可。

将其注册成服务

我是看着这个教程做的https://blog.csdn.net/fjh1997/article/details/103672631,但是文中应该是有一个错误,“我们把下载好的所有*.ini文件放到/etc/frpc/目录下”,因为frpc@.service中的路径是 /etc/frp 所以应该放在 /etc/frp下。如果放在了frpc下需要改一下service中的路径。

还记得之前的systemd文件夹吗,那个就是注册成服务用的。

cd systemd进入文件夹 ls

一共有四个文件 frpc.service 和 frpc@.service还有frps的,带@和不带@的区别就是带@可以在启动服务的时候指定配置文件,不带@的只能使用文件中固定的配置文件

下面是frpc@.service的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=idle
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/%i.ini #重点
ExecReload=/usr/bin/frpc reload -c /etc/frp/%i.ini #重点

[Install]
WantedBy=multi-user.target

比较重要的就是这两个

1
2
ExecStart=/usr/bin/frpc -c /etc/frp/%i.ini   
#这两个分别是frpc的路径和 frpc.ini的路径,其中frpc.ini通过%i实现了实时替换

所以我们重点就是将 frpc 移动到 /usr/bin/下 , 将 frpc.ini移动带 /etc/frp/下 , 将frpc@.service移动到/etc/systemd/system/下。

然后通过

1
2
3
4
systemctl enable frpc@frpc  #这步用来注册服务     第一个frpc表示在/etc/systemd/system/下的frpc@.service,第二个frpc表示配置文件的前缀
systemctl start frpc@frpc #这步用来启动服务 通过x@x来表示
systemctl restart frpc@test #如果我想更改配置,那么可以在/etc/frp/下创建test.ini,然后通过这个重新启动。

对于frps也一样哦,移动三个文件,然后注册服务、启动,大功告成啦。