让我们从0开始搭建一个很酷的内网穿透功能.
作为一名程序员,谁不想拥有一个自己的云服务器呢. 但是当我们看了各大云服务器厂商的价格后, 不禁陷入了沉思:我好像对云服务器的诉求也没那么大! 等我们回家看到家里闲置的老旧电脑时,又会想,我为啥要用云服务器呢,家里的电脑改吧改吧, 不也就可以用了. 我们又不用做大流量的网站, 最多搞搞博客,跑跑爬虫啥的,只要能让我们可以随时在外面访问我家里的电脑,控制家里的电脑就行了. 好的,说干就干, 经过一番调研, 我们发现, 好像没自己想象的那么简单. 一个最直接的问题就是, 我们没有一个自己的ip,因为众所周知的ipv4资源耗尽的问题, 我们家里实际上网的ip其实不是固定的, 而是多家用户共享一个ip地址,也就是NAT(Network Address Translation)技术. 所以,从外网我们是无法直接访问家里的电脑的. 这个问题怎么解决呢? 就是我们今天要聊的话题, 内网穿透技术.
什么是内网穿透
内网穿透,也即NAT穿透,进行NAT穿透是为了使具有某一个特定源IP地址和源端口号的数据包不被NAT设备屏蔽而正确路由到内网主机. 大致流程如图:
准备工作
- 一台云服务器, 最便宜的即可,我们主要用其来注册内网服务器, 转发请求
- frp工具
- 家用电脑,台式,笔记本都行,操作系统任意.
开始内网穿透
云服务器搭建frp服务
参考官方安装frp说明, 下载合适自己服务器的frp版本, 解压到自定义的frp服务目录. 因为是服务器部分, 我们直接启用frps 即可启动成功frp的服务部分.
# 启动frps, 并指定配置文件为frps.ini
./frps -c ./frps.ini
配置部分参考官方配置样例. 我们demo样例只使用ssh基本服务, 就用了默认配置.
[common]
bind_port = 7000
配置frps为系统服务(选做)
为了方便, 我们一般会将frps配置成系统重启自动加载. 这样我们就不用担心服务器系统重启导致内网穿透服务掉线了.
方法如下:
- 先确认系统支持
systemd
, 如果不支持请安装# yum yum install systemd # apt apt install systemd
- 配置frps.service服务
vim /etc/systemd/system/frps.service
写入下面内容 ``` [Unit]
服务名称,可自定义
Description = frp server After = network.target syslog.target Wants = network.target
[Service] Type = simple
启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.ini
[Install] WantedBy = multi-user.target
3. 开机自动启动
```bash
systemctl enable frps
家用电脑安装frp客户端
我家里的电脑是windows10, 当然, Linux更好. 本次内网穿透的目的是可以通过远程ssh控制我的家用电脑.
win10的一些准备功能
windows系统作为家用本, 对网络权限限制的比较多, 需要我们额外做一些操作.
a. 安装windows的ssh服务端
win10默认是不支持ssh的服务端的, 需要我们安装相应的OpenSSH服务器.
操作步骤: 设置->应用-> 应用与功能 -> 可选功能 -> 添加OpenSSH服务器
最后开启ssh服务,以管理员身份打开cmd终端,执行如下命令
net start sshd
b. 防火墙可能会将frpc识别为危险文件, 记得去防火墙那里将工具恢复.
配置frp客户端
从官网下载下frpc客户端后,且成功从防火墙那里逃生, 就可以继续后面的操作了 首先同样先修改配置文件
[common]
# 你的云服务器实际ip
server_addr = x.x.x.x
# 云服务配置的端口
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
# 本地要暴露的端口, windows网络限制比较严格,记得去防火墙打开相应端口
local_port = 22
# 远程服务器监听的端口. 意思就是frps服务器监听6000的端口, 然后把请求转发的本地的22端口上.
remote_port = 6000
然后打开cmd终端使用命令行的方式启动frpc工具
最后就可以在外网使用ssh命令访问你的系统了
ssh -oPort=6000 你的系统用户名@x.x.x.x
frp 会将请求 x.x.x.x:6000 的流量转发到内网机器的 22 端口
修改window默认终端为powerShell(选做)
windows的默认终端为cmd, 很多命令不与linux兼容. 所以建议将windows的默认终端改为powerShell, 更方便.
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
参考
文档信息
- 本文作者:寒澈
- 本文链接:https://www.hancher.top/2023/03/26/nat_intranet_frp/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)