最简单的Ubuntu SSH / Frp内网穿透配置

内网:家里或者公司的机器

公网:云服务器

外网:需要访问内网的机器

SSH

公网服务器配置

修改sshd配置/etc/ssh/sshd_config

GatewayPorts yes

除了开放sshd用的端口,还需要开放一个[公网服务器开放端口],用作转发数据

内网

为了能够断开自动重连,安装autossh(ubuntu)

sudo apt-get install autossh

与公网服务器建立连接通道

autossh -M [内网任意未使用端口] -NR [公网服务器开放端口]:127.0.0.1:[本地sshd端口] [公网服务器用户名]@[公网ip]

//提示输入公网服务器密码

-M 后面的这个参数端口貌似用echo service做监听重连的,没太看明白

-N Do not execute a remote command. This is useful for just forwarding ports

-R Specifies that connections to the given TCP port or Unix socket on the remote (server) host are to be forwarded to the local side

这样配置好以后,外网连上的[公网服务器开放端口]的数据就会转发到内网的[本地sshd端口]

外网配置

上面两部配置完成之后就可以远程ssh到内网了

ssh [内网用户名]@[公网ip] -p [公网服务器开放端口]
//提示输入内网服务器密码

使用ssh开启隧道代理:

ssh -nNTf -D [本地上网代理端口] [内网用户名]@[公网ip] -p [公网服务器开放端口]

同样,可以使用autossh断连之后自动重连。需要把-nNTf参数放到后面,否则会将-f误认为是autossh的参数,无法提示输入密码:

autossh -M 0  -D [本地上网代理端口]  [内网用户名]@[公网ip] -p [公网服务器开放端口] -nNTf

有时候使用autossh也会断开,可以在/etc/ssh/config加上

ServerAliveInterval 60

那么就会每隔60s,就会发一次消息,确保在线。如果还想继续处理其他未知的情况,使用暴力不断重连的命令

while true; do [ssh链接命令]; sleep 5;done

这样就开启了socket5协议代理,将浏览器或应用的代理设置为sockets://127.0.0.1:[本地上网代理端口], 就可以成功穿透到内网了!

Frp

发现有时候不稳定的时候ssh老是断开导致公网的服务器转发端口有时候监听失败,看了下Frp配置也比较简单,目前看来比较稳定。

公网服务器配置

首先去Frp项目下载release软件,不同的操作系统都有包含,服务端和客户端都在一个包里面。

下载之后解压,配置服务端的配置文件 frps.ini

[common]
bind_port = {frp监听端口}
dashboard_port = {控制台端口,用作http协议访问}
dashboard_user = {控制台用户名}
dashboard_pwd = {控制台密码}
authentication_method = token
token = {用于frp客户端访问验证}

之后直接运行可执行文件frps即可

内网服务器配置

客户端配置文件frpc.ini:

[common]
server_addr = {frp服务端公网ip}
server_port = {frp服务端监听端口}
token= {frp服务端访问令牌}

[ssh-mac] {不同的客户端需要有不同的名字}
type = tcp
local_ip = 127.0.0.1
local_port = {sshd监听端口}
remote_port = {用于转发数据的端口}
use_encryption = true
use_compression = true

之后直接运行可执行文件frpc即可

外网配置

上面两部配置好之后,就可以通过remote_port ssh到内网了,按照前面的命令配置ssh隧道代理!