frp内网穿透

原理

frp(fast reverse proxy)分为Server端和Client端,Server端安装在带有公网IP的服务器上,Client安装在内网环境但能上网的普通PC中。

流程:

  1. Server端提供一个bind_port端口,Client端提供remote_port端口和local_port端口
  2. Client端通过Server_IP+bind_port找到Server端,并告诉Server端我需要一个端口remote_port
  3. Server端在本地监听remote_port端口,把通过remote_port端口的流量传给remote_port对应的Client
  4. Client端把从Server端remote_port传过来的流量传到配置的local_port

用户访问流程:

  1. 用户通过访问Server_IP:remote_prot,相当于访问Client_IP:local_port。其中Client_IP(为内网IP),相当于实现了内网穿透

如图:
image-20200630144653856

安装Server端

进入下载页面,下载frp_0.33.0_linux_amd64.tar.gz后,运行以下命令:

# 解压并进入目录
tar -zxvf frp_0.33.0_linux_amd64.tar.gz && cd frp_0.33.0_linux_amd64

# 把frps、frps.ini移动到适当位置
sudo mv ./frps /usr/bin/
sudo mkdir -p /etc/frp
sudo mv ./frps.ini /etc/frp/

# 创建frps.service
cat <<EOF | sudo tee /lib/systemd/system/frps.service
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini

[Install]
WantedBy=multi-user.target
EOF

# 配置frps.ini,其他配置参考:https://github.com/fatedier/frp
cat <<EOF | sudo tee /etc/frp/frps.ini
[common]
bind_port = 7000
# http端口
vhost_http_port = 7001
# https端口
# vhost_https_port = 7002
EOF


# 开启frps并设置开机启动
sudo systemctl daemon-reload
sudo systemctl start frps
sudo systemctl enable frps
sudo systemctl status frps

# 开启防火墙
iptables -A INPUT -p TCP -i $EXTIF --dport 7000 --sport 1024:65534 -j ACCEPT
/usr/sbin/netfilter-persistent save

安装Client端

Linux

进入下载页面,下载frp_0.33.0_linux_amd64.tar.gz后,运行以下命令:

# 解压并进入目录
tar -zxvf frp_0.33.0_linux_amd64.tar.gz && cd frp_0.33.0_linux_amd64

# 把frps、frps.ini移动到适当位置
mv ./frpc /usr/bin/
mkdir -p /etc/frp
mv ./frpc.ini /etc/frp/

# 创建frpc.service
cat <<EOF > /lib/systemd/system/frpc.service
[Unit]
Description=Frp Client Service,User=nobody
After=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini

[Install]
WantedBy=multi-user.target
EOF

# 配置frpc.ini,其他配置参考:https://github.com/fatedier/frp
cat <<EOF | sudo tee /etc/frp/frpc.ini
[common]
server_addr = IP地址
# 用于与服务端通信
server_port = 7000

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

[web]
type = http
local_port = 11000
local_ip = 127.0.0.1
custom_domains = IP地址或域名

EOF


# 开启frps并设置开机启动
sudo systemctl daemon-reload
sudo systemctl start frpc
sudo systemctl enable frpc
sudo systemctl status frpc

Win10

参考Linux版本配置

内网穿透

从ssh终端访问:ip:remote_port即可,在以上配置,则访问:IP地址:6000

有其他需要,请自行参考:https://github.com/fatedier/frp/blob/master/README_zh.md

原文地址:https://www.cnblogs.com/testopsfeng/p/13214985.html