frp工作原理:服务端运行,监听一个主端口,等待客户端的连接;客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;服务端fork新的进程监听客户端指定的端口;外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
一、服务端配置
- 将下载好的frp库用远程连接工具上传到服务器上
- 解压frp压缩包:tar -zxvf frp_0.37.1_linux_amd64.tar.gz
- 进入解压目录:cd frp_0.37.1_linux_amd64
- 打开服务端配置文件:vim frps.ini ( 并配置 )(frp的监听端口,默认是7000)
- 创建目录:sudo mkdir /etc/frp
- 将frps.ini复制到该目录下:sudo cp frps.ini /etc/frp
- 复制相应文件到指定目录:sudo cp frps /usr/bin
- 设置服务端配置文件自启动:vim frps.service
-
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody #指定了服务运行时使用的用户,即 nobody 用户
Restart=on-failure #指定了服务在出现故障时重新启动的策略,即在失败时自动重启
RestartSec=5s #每次重启之间的间隔时间为 5 秒
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini #服务启动时要运行的命令
LimitNOFILE=1048576 #服务可以打开的最大文件描述符数量,即 1048576
[Install]
WantedBy=multi-user.target #当系统进入多用户模式时,该服务将自动启动
- 将该脚本复制到启动脚本那里:sudo cp /home/frp_0.37.1_linux_amd64/frps.service /usr/lib/systemd/system/
- 设置开机自启动:sudo systemctl enable frps.service
- 启动:sudo systemctl start frps.service
- 查看状态(看到如下图示,则启动成功):sudo systemctl status frps.service
- 如果配置了防火墙,记得放行相应端口,没配防火墙就不用管
二、客户端配置
(1)将下载好的frp库用远程连接工具上传到内网虚拟机上
(2)解压
(3)进入解压目录:cd frp_0.37.1_linux_amd64
(4)编辑frpc.ini配置文件:vim frpc.ini
(该配置文件的含义:将本地的 127.0.0.1:8088(即本地的 127.0.0.1 地址和 8088 端口)映射到远程服务器的 81.69.6.219:7676(即服务器的 81.69.6.219 地址和 7676 端口)。意味着当在本地连接到 127.0.0.1:8088 时,实际上会被转发到服务器的 81.69.6.219:7676)
(5)客户端启动:./frpc -c frpc.ini (看到下图所示,则启动成功)
(6)在云服务器上开放7676端口
(7)创建目录:sudo mkdir /etc/frp
(8)将frpc.ini复制到该目录下:sudo cp frpc.ini /etc/frp
(9)复制相应文件到指定目录:sudo cp frpc /usr/bin
(10)进入该目录下:cd /usr/lib/systemd/system/
(11)创建客户端自启动脚本:vim frpc .service
(12)设置开机自启动:sudo systemctl enable frpc.service
(13)启动:sudo systemctl start frpc.service
(14) 查看状态(看到如下图示,则启动成功):sudo systemctl status frpc.service
三、Iptables的NAT规则,进行端口转发(云服务器)
(1)iptables 的 NAT 规则,将来自公网 IP 地址为 81.69.6.219、端口为 7676 的 TCP 请求,转发到本地网络中的另一台服务器(IP 地址为 192.168.1.4)的端口 8088:
sudo iptables -t nat -A PREROUTING -p tcp -d 81.69.6.219 --dport 7676 -j DNAT --to-destination 192.168.1.4:8088
(2)检查是否成功设置了转发规则:sudo iptables -t nat -L
(表示已经成功添加了 PREROUTING 链中的 DNAT 规则,将目标 IP 地址为 81.69.6.219、端口为 7676 的 TCP 请求转发到了 192.168.1.4:8088)