NAT内网穿透

使用frp实现内网穿透

github:https://github.com/fatedier/frp
下载地址:https://github.com/fatedier/frp/releases

开启openssh服务

systemctl status ssh

# 如果没有安装
sudo apt update
sudo apt install openssh-server

# 设置 SSH 服务器
vim /etc/ssh/sshd_config
PermitRootLogin yes  # 允许root用户远程登录
PasswordAuthentication yes # 允许远程密码登录

# 防火墙可能配置 
sudo ufw allow OpenSSH
sudo ufw status


# 检查配置文件
sudo sshd -T | grep "sshd_config"  # 验证正在使用的配置文件路径:
sudo grep sshd /var/log/auth.log  # 查看 SSH 相关的日志:

bash


一.公网服务器A

1.下载frp

wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
目前可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。

2.部署

解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。(都放着就行,c端开c,s端开s)

3.在具有公网 IP 的机器上部署 frps,修改 frps.ini 文件,这里使用了最简化的配置,设置了 frp 服务器用户接收客户端连接的端口:

[common]
bind_port = 7000

4.使用 systemd

在 Linux 系统下,使用systemd 可以方便地控制 frp 服务端 frps 的启动和停止、配置后台运行和开启自启。

4.1下载systemd
# yum
yum install systemd
# apt
apt install systemd
4.2vim 创建并编辑 frps.service 文件。
vim /etc/systemd/system/frps.service
4.3内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /root/nat/frp/frp_0.51.3_linux_amd64/frps -c /root/nat/frp/frp_0.51.3_linux_amd64/frps.ini

[Install]
WantedBy = multi-user.target
4.4使用 systemd 命令,管理 frps
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
4.5配置 frps 开机自启。
systemctl enable frps

5.启动frps

systemctl start frps

二.目标内网服务器B

1.下载frp

wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
目前可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。

2.部署

解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。(都放着就行,c端开c,s端开s)

3.在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x:

[common]
server_addr = x.x.x.x   (47.97.118.247)
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1  # local_ip 和 local_port 配置为本地需要暴露到公网的服务地址和端口
local_port = 22
remote_port = 6000

4.使用 systemd

在 Linux 系统下,使用systemd 可以方便地控制 frp 用户端frpc 的启动和停止、配置后台运行和开启自启。

4.1下载systemd
# yum
yum install systemd
# apt
apt install systemd
4.2vim 创建并编辑 frpc.service 文件。
vim /etc/systemd/system/frpc.service
4.3内容
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frpc的安装路径
ExecStart = /home/mh/frp/frp_0.51.3_linux_amd64/frpc -c /home/mh/frp/frp_0.51.3_linux_amd64/frpc.ini

[Install]
WantedBy =multi-user.target
4.4使用 systemd 命令,管理 frpc
# 启动frp
systemctl start frpc
# 停止frp
systemctl stop frpc
# 重启frp
systemctl restart frpc
# 查看frp状态
systemctl status frpc
4.5配置 frpc 开机自启。
systemctl enable frpc

5.启动frpc

systemctl start frpc

三.自身内网服务器C

通过 SSH 访问内网机器,假设用户名为 mh:

ssh -oPort=6000 mh@x.x.x.x
mh: 连接目标内网服务器A的用户名
x.x.x.x:公网服务器B的公网ip

注意:::::::

如果是阿里云服务器,安装上面的配置,需要在安全组配置开发,6000和7000端口。

使用ngrok实现内网穿透

1.下载并设置 ngrok:

在目标机器上,下载适用于 Linux 的 ngrok,并解压缩它。您可以从 ngrok 官方网站下载最新版本。

wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip

# 1.登录到 https://dashboard.ngrok.com/,然后在左侧菜单中找到 "Auth" 选项,您将在这里找到您的 AuthToken。

# 2.配置编辑 ngrok 的配置文件,一般命名为 ngrok.yml
vim ngrok.yml

# 3.在配置文件中添加 AuthToken:
authtoken: YOUR_AUTH_TOKEN_HERE

tunnels:
  ssh:
    proto: tcp
    addr: 22

# 4.启动
./ngrok start --config=ngrok.yml ssh

2.启动 ngrok:

使用以下命令启动 ngrok,将本地 SSH 服务器的端口暴露到互联网上。假设您的 SSH 服务器监听在默认端口 22 上:

./ngrok tcp 22

3.连接到 ngrok 提供的公共地址:

在您启动 ngrok 后,它将生成一个随机的公共地址,形式如 tcp://0.tcp.ngrok.io:12345。其中的端口号可能会有所不同。您可以使用此地址以及指定的端口号通过 SSH 连接到您的目标机器:

ssh user@0.tcp.ngrok.io -p 12345

在这里,user 是您在目标机器上的用户名,0.tcp.ngrok.io 是 ngrok 提供的公共地址,12345 是 ngrok 映射到您的本地 SSH 服务器的端口号。

ngrok和frp的区别

1 .开源与商业:
ngrok:最初是一个开源项目,但后来推出了商业版(ngrok Pro),商业版提供更多功能和支持,包括自定义子域名、HTTPS 支持等。
frp:是一个完全开源的项目,您可以自由地使用和修改它。

2.配置和设置:
ngrok:使用起来相对简单,不需要太多的配置。您只需要运行 ngrok 并指定要暴露的端口即可。
frp:需要在内网和外网两端分别配置客户端和服务器端,需要在配置文件中定义映射规则。

3.协议和支持:
ngrok:主要支持 HTTP/HTTPS 协议,并且在商业版中提供了一些高级功能。
frp:支持多种协议,包括 TCP、UDP、HTTP 等,因此更适用于更广泛的内网服务。

4.灵活性和定制性:
ngrok:商业版提供了更多的自定义选项,例如自定义子域名、自签名证书等。
frp:由于完全开源,您可以根据自己的需求修改和定制代码。

5.性能和稳定性:
ngrok 和 frp 在性能和稳定性方面有些差异,具体取决于使用方式、网络环境等因素。一般来说,商业版的 ngrok 可能会提供更好的性能和稳定性,而 frp 的性能可能会受到自身服务器和网络环境的影响。

总的来说,选择使用 ngrok 还是 frp 取决于您的具体需求和偏好。如果您需要一个更简单的解决方案,可以考虑使用 ngrok。如果您需要更大的灵活性和更广泛的协议支持,以及您愿意进行一些配置和定制,那么 frp 可能更适合您。无论选择哪个工具,都要注意确保安全性和适当的配置,以保护您的内网资源。

使用pem连接(使用密码不安全)

1.在内网服务器A生成密钥对

ssh-keygen -t rsa -b 4096

# ssh-keygen 是一个用于生成 SSH 密钥对的命令行工具
# -t 参数用于指定密钥类型,
# rsa 表示生成 RSA 密钥对
# -b 参数用于指定密钥的位数
# 4096 表示生成的密钥长度为 4096 位。

# RSA 密钥对,其中包括:
# id_rsa: 私钥文件,用于进行身份验证。
# id_rsa.pub: 公钥文件,可以在目标服务器上进行配置,以便允许您使用私钥连接。


### 保证内网服务器A将自己的公钥添加到自己的~/.ssh/authorized_keys文件
cat ~/.ssh/user1_id_rsa.pub >> ~/.ssh/authorized_keys

2.复制内网服务器A的公钥到公网服务器上

# 1.手动到~/.ssh/authorized_keys

# 2.命令
ssh-copy-id -i /root/.ssh/id_rsa.pub root@B_public_address -p B_mapped_port

# ssh-copy-id: 这是命令本身,用于将公钥复制到远程服务器上。~/.ssh/authorized_keys 文件中。
# -i /root/.ssh/id_rsa.pub: 这是指定要复制的公钥文件的路径。eg. /root/.ssh/id_rsa.pub,这是您本地机器上生成的 SSH 密钥对的公钥文件。
# root@B_public_address: 这是远程服务器的用户名和公网 IP 地址(或域名)。您需要将 root 替换为实际的用户名,B_public_address 替换为实际的服务器公网 IP 地址(或域名)。
# -p B_mapped_port: 这是指定远程服务器的 SSH 服务映射的端口。您需要将 B_mapped_port 替换为实际的映射端口,用于通过内网穿透访问 SSH 服务。eg. 5999  (默认是22)
# 输入的密码是A机器的密码


3.验证

ssh -i /path/to/your/private/key_for_A user@B_public_address -p port

4./etc/ssh/sshd_config文件配置

PasswordAuthentication no
PermitRootLogin yes
PubkeyAuthentication yes

在本地配置ssh连接文件

编辑 ~/.ssh/config 文件。如果文件不存在,可以创建一个新文件。

Host myserver
    HostName 服务器IP地址或域名
    User 用户名
    Port 你的SSH端口号
    IdentityFile C:\Users\您的用户名\.ssh\私钥文件路径


#### 连接
ssh myserver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值