frp服务器内网穿透设置

内网穿透的作用

内网穿透是指在一个局域网内(也称内网)中,通过某种技术手段,将局域网内部的网络资源(如ssh服务、Web服务、数据库等)暴露到公网中,从而实现公网用户对内网资源的访问和控制。它可以使得外部用户能够访问局域网内部的设备和服务,从而达到远程控制、监控、协作等目的。内网穿透通常需要使用专门的工具或软件,例如ngrok、frp、zerotier等,这些工具可以通过各种方式(如端口映射、反向代理等)来实现内网穿透功能。内网穿透技术已经被广泛应用于云服务器、远程办公、物联网等领域。

常见内网穿透方式

实现服务器内网穿透的工具有很多,其中比较常用的有以下几种:

  1. ngrok:一种基于HTTP和TCP隧道技术的内网穿透工具,可以将本地的Web应用、SSH、RDP等服务映射到公网上,支持多平台使用,无需配置路由器,可以快速方便地进行内网穿透。
  2. frp:一种高性能的内网穿透工具,支持TCP、UDP、HTTP等多种协议,可用于远程访问和控制内网中的服务,支持多平台使用,配置简单,易于使用。
  3. zerotier:一种基于SD-WAN技术的内网穿透工具,可以将多个不同地理位置的计算机组成虚拟局域网,实现对内网服务的访问和控制,支持多平台使用,易于配置和使用。

在使用上述工具之前,需要准备以下材料:

  1. 一台服务器,用于承载内网穿透工具和需要远程访问的服务。
  2. 一个公网IP地址或者域名,用于映射内网服务器的IP地址和端口(或者直接使用花生壳的服务)。
  3. 网络端口的设置和配置,包括路由器和防火墙的配置,以确保内网穿透的安全性和稳定性。

根据所选的内网穿透工具,需要下载相应的软件包,并按照其官方文档进行配置和使用。下面将介绍frp实现内网穿透的详细设置。

frp内网穿透设置

frp内网穿透设置

frp内网穿透的基本原理可通过下图来了解。frp服务端软件将内网的CS-Monitor服务器映射到云服务器的公网IP地址上,接入外网的读者计算机,并和云服务器一起组成新的信息邮局,为终端与人机交互系统提供服务。
image.png
image.png
frp由两部分组成,即frpc和frps。其中,frpc是客户端程序,用于连接服务器端的frps,并将内网的服务映射到公网。而frps是服务端程序,用于接受来自frpc的连接请求,并将请求转发到内网中的服务上。

启动frps

要在有公网IP的云主机上开启frps服务,您可以按照以下步骤进行操作:

wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
# https://github.com/fatedier/frp/releases查看最新版本frp

tar -xzf frp_0.48.0_linux_amd64.tar.gz
mv frp_0.48.0_linux_amd64 frp

cat > frps.ini <<-EOF
[common]
# bind_port = 12326
# or
allow_ports = 12320-12330
authentication_method = $(token***)
EOF

# 替换$(token***)为对应token,从而保证其安全性
# 注意:如果在云主机启动frps服务,则需要在云主机的控制台设置安全组,开放12320-12330端口

cat > /etc/systemd/system/frps.service <<-EOF
[Unit]
Description=Frp Server
After=network.target
ConditionPathExists=/usr/local/frp/frps

[Service]
Type=simple
DynamicUser=true
ExecStart=/usr/local/frp/frps -c /etc/frp/frps.ini 
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo mkdir /usr/local/frp
sudo cp frps /usr/local/frp/
sudo chown root:root /usr/local/frp/frps
sudo mkdir /etc/frp
sudo cp frps.ini /etc/frp/
sudo chown root:root /etc/frpc/frps.ini

# 启动frps服务并设置开机自启
sudo systemctl start frps
sudo systemctl enable frps

Token Authentication
When specifying authentication_method = token under [common] in frpc.ini and frps.ini - token based authentication will be used.
Make sure to specify the same token in the [common] section in frps.ini and frpc.ini for frpc to pass frps validation

systemd的更多有关内容请查看systemd服务启动frpc

启动frpc

命令行启动frpc

在需要反向代理的设备上设置frpc。

wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
# https://github.com/fatedier/frp/releases查看最新版本frp

tar -xzf frp_0.48.0_linux_amd64.tar.gz
mv frp_0.48.0_linux_amd64 frp

cd frp
cat >> frpc.ini <<-EOF
[common]
server_addr = IP
server_port = 12300
token = $(token***)

[fmm]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 12326
EOF
# 修改对应配置文件,token部分为frp server短的token
# local_port为本机需要内网穿透的服务所在端口
# remote_port为远端端口该端口,该端口需要安全组配置

./frpc -c frpc.ini
# 尝试根据ssh -p12326 user@ip登录
# 如果登陆成功,表明命令行方式启动正常
# Ctrl+c终止frpc进程,并尝试设置systemd服务

systemd服务启动frpc

Systemd是一种Linux操作系统的初始化系统和服务管理器,它是在引导时第一个启动的进程,并负责启动和管理所有系统服务。相比于传统的init守护进程和Upstart系统,systemd拥有更为现代化的设计理念和更高效的实现方式。Upstart系统类似于原来的SysVinit系统,需要依赖于init脚本来激活服务,以及运行级的概念。而systemd采用一种基于单元文件的配置方式,可以通过简单的配置文件来管理系统服务,避免了编写繁琐脚本的工作。此外,systemd还引入了新的特性和功能,如原生支持容器化应用、更丰富的日志管理能力等,使得系统管理更为便捷和高效。

cat > /etc/systemd/system/frpc.service <<-EOF
[Unit]
Description=Frp Server Service 
After=network.target 

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

[Install]
WantedBy=multi-user.target
EOF

sudo mkdir /usr/local/frp
sudo cp frpc /usr/local/frp/
sudo chown root:root /usr/local/frp/frpc
sudo mkdir /etc/frpc
sudo cp frpc.ini /etc/frpc/
sudo chown root:root /etc/frpc/frpc.ini

systemctl start frpc
systemctl status frpc
# 尝试根据ssh -p12326 user@ip登录
# 如果登陆成功,表明systemd服务方式启动正常
systemctl enable frpc
# 设置服务开机自启

如果服务器本身无法直接访问网络,则在ExecStart前添加service所需的代理环境变量:

cat > /etc/systemd/system/frpc.service <<-EOF
[Unit]
Description=Frp Server Service 
After=network.target 

[Service]
Type=simple 
User=nobody 
Restart=on-failure 
RestartSec=5s 
Environment="http_proxy=http://$(Proxy_IP):7890"
Environment="https_proxy=http://$(Proxy_IP):7890"
Environment="all_proxy=http://$(Proxy_IP):7890"
ExecStart=/usr/local/frp/frpc -c /etc/frpc/frpc.ini 

[Install]
WantedBy=multi-user.target
EOF

# 修改完毕之后,尝试重新加载配置和重启服务
sudo systemctl daemon-reload
sudo systemctl restart frpc
# 尝试根据ssh -p12326 user@ip登录
# 如果登陆成功,表明systemd服务方式启动正常

重启设备之后,可sudo cat /var/log/dmesg | grep frpc或者sudo dmesg | grep frpc查看服务启动日志,得到/etc/systemd/system/frpc.service:7: Special user nobody configured, this is not safe!的提醒。
新版systemd引入了一项新的安全规范来替代使用nobody的做法,以提高系统的安全性和稳定性。
User=nobody替换为DynamicUser=true即可

cat > /etc/systemd/system/frpc.service <<-EOF
[Unit]
Description=Frp Server Service 
After=network.target 

[Service]
Type=simple 
# User=nobody 
DynamicUser=true
Restart=on-failure 
RestartSec=5s 
Environment="http_proxy=http://$(Proxy_IP):7890"
Environment="https_proxy=http://$(Proxy_IP):7890"
Environment="all_proxy=http://$(Proxy_IP):7890"
ExecStart=/usr/local/frp/frpc -c /etc/frpc/frpc.ini 

[Install]
WantedBy=multi-user.target
EOF

# 修改完毕之后,尝试重新加载配置和重启服务
sudo systemctl daemon-reload
sudo systemctl restart frpc
# 尝试根据ssh -p12326 user@ip登录
# 如果登陆成功,表明systemd服务方式启动正常

重启设备之后,可sudo cat /var/log/dmesg | grep frpc或者sudo dmesg | grep frpc查看服务启动日志,得到/etc/systemd/system/frpc.service:7: Special user nobody configured, this is not safe!的提醒。
新版systemd引入了一项新的安全规范来替代使用nobody的做法,以提高系统的安全性和稳定性。
User=nobody替换为DynamicUser=true即可

cat > /etc/systemd/system/frpc.service <<-EOF
[Unit]
Description=Frp Server Service 
After=network.target 

[Service]
Type=simple 
# User=nobody 
DynamicUser=true
Restart=on-failure 
RestartSec=5s 
Environment="http_proxy=http://$(Proxy_IP):7890"
Environment="https_proxy=http://$(Proxy_IP):7890"
Environment="all_proxy=http://$(Proxy_IP):7890"
ExecStart=/usr/local/frp/frpc -c /etc/frpc/frpc.ini 

[Install]
WantedBy=multi-user.target
EOF

# 修改完毕之后,尝试重新加载配置和重启服务
sudo systemctl daemon-reload
sudo systemctl restart frpc
<think>好的,我现在需要帮助用户了解如何使用FRP实现云服务器内网穿透配置。首先,我要整理用户提供的引用内容,这些引用提到了FRP的配置步骤、服务端和客户端的设置、以及相关的系统服务配置。用户的问题主要集中在教程上,所以需要按照步骤来组织回答,确保结构清晰。 首先,我应该从准备工作开始,包括下载FRP、安装服务端和客户端。根据引用[2],用户需要从GitHub下载FRP的发布版本,并安装服务端在Linux上。引用[3]提到服务端部署在CentOS,客户端在Windows,所以需要区分不同系统的配置。 接下来是服务端配置。引用[1]和[4]都提到了修改frps.ini文件,设置bindPort和token。需要强调这些关键参数,并说明如何通过systemd配置服务(如frps.service),确保服务端可以自动启动。 然后是客户端配置。引用[3]中的例子是Minecraft服务器在Windows上,所以需要展示客户端配置文件frpc.ini的示例,包括serverAddr、serverPort、token,以及具体的穿透类型(如tcp、http)。需要说明不同的应用场景如何调整配置,比如远程桌面或Web服务。 启动服务部分需要分别指导服务端和客户端的启动命令,Linux用systemctl,Windows用命令行。可能还需要提到验证服务是否成功,比如检查端口监听情况或日志输出。 最后,生成相关问题,帮助用户深入理解。比如如何配置多端口、安全优化方法、故障排查等。需要确保问题覆盖用户可能遇到的后续疑问,并参考引用中的内容,比如引用[4]提到的远程桌面配置。 在整理过程中,要注意使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,但当前问题不涉及数学公式,可能不需要使用。但需要检查是否有其他格式要求,如代码块用三个反引号包裹,并标明语言。 还要确保回答结构符合用户要求:逐步说明,引用标识自然添加。例如,在提到修改frps.ini时,引用[1]和[4]的相关步骤,添加[^1][^4]。 可能需要注意的细节:服务端和客户端的配置文件名称(frps.ini vs frpc.ini),端口的正确设置,token的安全性,以及如何配置不同的穿透类型(如TCP、HTTP)。引用[3]中的例子是Minecraft,可能需要说明如何映射TCP端口,而引用[4]是远程桌面,可能涉及RDP的默认端口3389。 需要确认步骤是否完整,没有遗漏关键点,比如防火墙设置(如开放端口),这可能在一些教程中提到,但用户提供的引用中没有明确说明,可能需要提示用户检查防火墙或安全组规则。 总结步骤:准备→配置服务端→配置客户端→启动→验证。每个步骤引用相关的资料,确保用户能按照指引操作。可能还需要提醒用户替换示例中的IP、端口、token为实际的值,避免直接复制粘贴导致错误。</think>### 分步教程:使用FRP实现云服务器内网穿透 #### 1. **准备工作** - **下载FRP** 从GitHub下载对应系统的FRP客户端和服务端程序[^2]。 ```bash wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz tar -zxvf frp_0.61.0_linux_amd64.tar.gz ``` - **服务端与客户端划分** - **服务端**:部署在云服务器(如CentOS)[^3]。 - **客户端**:部署在内网设备(如Windows电脑)。 --- #### 2. **配置服务端(云服务器)** 1. **修改配置文件** 进入解压目录,复制并编辑`frps.ini`: ```bash cd frp_0.61.0_linux_amd64/ cp frps.toml frps.ini vi frps.ini ``` 添加以下内容(以TCP穿透为例): ```ini [common] bind_port = 7000 # 服务端监听端口 authentication_method = token token = your_secure_token # 自定义令牌[^4] ``` 2. **配置系统服务(可选)** 创建`frps.service`文件实现开机自启: ```bash sudo vim /etc/systemd/system/frps.service ``` 内容如下: ```ini [Unit] Description=Frp Server Service After=network.target [Service] User=root ExecStart=/path/to/frps -c /path/to/frps.ini [Install] WantedBy=multi-user.target ``` --- #### 3. **配置客户端(内网设备)** 1. **编辑`frpc.ini`** 示例配置(映射内网SSH服务): ```ini [common] server_addr = 云服务器公网IP # 替换为实际IP server_port = 7000 authentication_method = token token = your_secure_token # 与服务端一致[^4] [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 # 通过云服务器的6000端口访问内网SSH ``` 2. **其他场景配置** - **远程桌面(Windows)**:将`local_port`改为`3389`,`remote_port`自定义。 - **Web服务**:使用`type = http`并配置子域名。 --- #### 4. **启动服务** - **服务端**: ```bash sudo systemctl start frps sudo systemctl enable frps ``` - **客户端**: Windows双击`frpc.exe`或命令行启动: ```powershell ./frpc -c frpc.ini ``` --- #### 5. **验证穿透效果** - 通过云服务器的公网IP和`remote_port`访问内网服务。 例如: ```bash ssh -p 6000 用户名@云服务器公网IP # 访问内网SSH ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值