Tiny Room

内网穿透

📅2025/7/14
⏱️3.115 min
🏷️
内网穿透Linuxssh网络内网计算机

局域网(LAN)内的所有设备通常共享一个出口 IP(NAT),广域网无法直接访问局域网内的某一设备,主要有以下限制

  • NAT(网络地址转换)
  • 防火墙
  • 动态公网 IP

内网穿透技术就是突破这一限制。这样就可以在外部很方便地直接访问内部设备,比如进行 ssh 连接内网某台 linux 主机


实现方式

  • 工具:frp一台具有公网 IP 的服务器
  1. 端口转发(Port Forwarding)
    将路由器某个特定的公网端口的请求,转发到内网中某个设备的私有 IP 地址和端口
  2. 打洞
  3. 代理转发(Proxy
    通过一个具有公网 IP 地址的中心服务器作为中转站,eg FRP

在 ubuntu 上使用 FRP 实现代理转发

开启 ubuntu 的 ssh 功能

安装 openssh

sudo apt update
sudo apt install openssh-server

查看 ssh 状态

sudo systemctl status ssh

启动 ssh

sudo systemctl start ssh

设置开机自启

sudo systemctl enable ssh

ubuntu 自带 ufw 防火墙
先启动防火墙,这样会阻止一切未允许的服务

sudo ufw enable

允许 ssh 连接(默认是 22 端口)

sudo ufw allow ssh

安装并启动 FRP 服务

github 仓库下载 ubuntu 的 FRP 包 ,在公网 IP 的服务器与局域网服务器各安装一份,进入解压后的文件夹

首先在广域网服务器启动 server 端服务

./frps -c ./frps.toml

并且打开与局域网建立连接的 端口 7000,以及对公网暴露的端口 6000 用于 ssh 访问等(也可以设置成其他非特殊端口)

然后在局域网服务器,先修改 frpc.toml 文件

serverAddr = "your_server_ip" # 公网IP
serverPort = 7000 # 与局域网连接的端口
# 如果frps设置了token,这里需要加上
# token = "your_auth_token"
 
[[proxies]]
name = "linux1-ssh"  # 代理名称必须唯一
type = "tcp"
localIP = "127.0.0.1"
localPort = 22       # 假设SSH服务在本机的22端口
remotePort = 6000    # 公网暴露的端口

启动 FRP 的 client 端服务

./frpc -c ./frpc

如果成功连接,会同时在两个端显示成功连接信息

在外网通过 ssh 访问局域网服务器

ssh -p 6000 user@ip

第一次连接需要同意认证指纹

分享这篇文章

相关文章