1.为什么需要内网穿透?
-
内网设备没有公网IP
家庭宽带、公司网络多数使用 NAT,共用一个公网IP,内部设备只有私有IP(如 192.168.x.x)。 -
防火墙阻止外部访问
路由器和防火墙默认不允许外部主动访问内部服务(如网站、NAS、摄像头)。 -
远程访问需求短代码选择!
-
想从外网访问家里的 NAS、服务器、监控设备
-
想把家里的开发环境或 API 暴露给外部测试
- 想远程控制内网电脑(RDP/SSH)
-
2.内网穿透的原理
核心是在内网和外网之间建立一条双向通道。常见实现方式有:
1. 基于端口映射(Port Forwarding)
-
在路由器/防火墙上配置端口转发规则,把公网IP的某个端口映射到内网机器端口。
-
缺点:需要管理路由器,动态IP变化时麻烦,不适合没有公网IP的情况。
2. 基于第三方中转服务器
-
内网客户端主动连接中转服务器(公网服务器)。
-
外网访问时通过中转服务器转发流量给内网客户端。
-
常用工具:
-
frp(Fast Reverse Proxy)
-
ngrok(国际知名)
-
cpolar(国内常用)
-
ZeroTier / Tailscale(虚拟局域网)
-
3. 打洞技术(P2P NAT Traversal)
-
通过 UDP/TCP 打洞技术,让两个 NAT 后的设备直连。
-
常用于 WebRTC、VoIP、游戏联机。
3.常见应用场景
-
搭建个人网站:在家电脑运行 web 服务,让外网能访问。
-
远程桌面 / SSH:不改路由器设置即可远程控制家里电脑。
-
文件共享 / NAS:外网访问家里的存储设备。
-
物联网(IoT)设备:远程控制摄像头、智能家居。
-
开发调试:向客户展示本地运行的 API / 小程序。
4.配置Frps服务端
- 利用Frp搭建内网穿透
- 首先需要准备一台具备公网ip的Linux/Windows机器搭建服务端,下面以Linux为例:
- 安装Linux服务端,执行命令
wget -N https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
- 执行解压命令
tar -zxf frp_0.54.0_linux_amd64.tar.gz
- 其中,frps是服务端程式,frpc是客户端程式
- 进入安装目录,按照下面示例修改frps.toml配置文件:
bindPort = 8000 ##服务端连接端口
auth.method = “token” ##开启密码验证
auth.token = “password” ##连接密码
webServer.addr = “0.0.0.0”
webServer.port = 8001 ##网页管理端口
webServer.user = “admin” ##管理员账号
webServer.password = “password” ##管理员密码
-
运行 FRP 服务端:
1.前台运行:
./frps -c ./frps.toml ##在FRP目录下输入此命令2.后台运行:
nohup ./frps -c ./frps.toml & ##在FRP目录下输入此命令
3 .Centos后台运行frp
vi /lib/systemd/system/frps.service[/precode]写入以下内容
[Unit]
Description=frps service After=network.target syslog.target Wants=network.target
[Service]
Type=simple
ExecStart=frps的实际安装目录/frps -c 实际安装目录/frps.toml
[Install]
WantedBy=multi-user.target
4.关闭服务端
输入命令查看线程号 ps -aux|grep frp| grep -v grep
结束frp线程 kill -9 ******(线程号)
-
使用下面命令启动frps服务端
- systemctl start frps
开机启动
systemctl enable frps
关闭开机自启
systemctl disable frps
重启程序
systemctl restart frps
停止程序
systemctl stop frps
查看应用日志
systemctl status frps
-
配置客户端
- 在客户端设备(需要被远程控制)编辑客户端配置文件frpc.toml
serverAddr = “服务端IP地址”
serverPort = 8000
auth.method =”token”
auth.token = “password” ##与服务端设置的密码需一致[[proxies]]
name = “awese” ##客户端名称,不可重复
type = “tcp” ##通讯协议,tcp/udp
localIP = “127.0.0.1”
localPort = 3389
remotePort = 1060 ##连接端口,不可重复-
运行客户端
1.打开 cmd
2.进入客户端安装目录
3.输入命令 frpc -c frpc.toml - 客户端设置到此结束,现在已经可以正常连接了,但是每次重启后都需要手动运行客户端,为了方便可以根据下面步骤将客户端程序打包成服务进程,以便可开机自启。
-
Windows将FRP设置为服务并开机自启
- 利用WinSw打包frp服务端程序作为服务进程,开机后自启并在后台运行此处需要使用到winsw 下载地址:https://github.com/kohsuke/winsw/releases下载解压至任意目录并进入目录;
这里将下载WinSw_x64.exe重命名为winsw.exe了,以方便后面操作;
创建与winsw同名的配置文件,以下为代码,后缀为 .xml
<service>
<id>frpc</id>
<name>frpc-service</name>
<description>frpc客户端 这个服务用 frpc 实现内网穿透</description>
<!– 要运行的程序路径 –>
<executable>frpc</executable>
<!– 携带的参数 –>
<arguments>-c frpc.toml</arguments>
<!– 日志模式 –>
<logmode>append</logmode>
<!– 指定日志文件目录(相对于executable配置的路径) –>
<logpath>logs</logpath>
</service>-
开始使用:
- 打开cmd或者powershell,用CD命令进入安装目录,然后执行注册服务命令,再执行启动服务命令
-
//注册服务
winsw.exe install
//卸载服务
winsw.exe uninstall
//启动服务
winsw.exe start
//停止服务
winsw.exe stop
//重启服务
winsw.exe restart
//查看状态
winsw.exe status - 如果提示:FATAL – WMI Operation failure: AccessDenied 则需要以管理员方式运行CMD再试;
从服务里面看 可执行文件的路径是:”D:\Software\frp\frp_0.54.0_windows_amd64\winsw”实际是 winsw.xml 中 executable 中的路径 不影响功能
评论(0)
暂无评论