公网访问内网中Wsl2服务器(借助frp)

0 先决条件

  • 公网服务器一台(本文以腾讯云服务器为例)
  • 已安装好的Wsl2子系统(本文为Ubuntu20.04)

1 Wsl2配置

编辑 wsl 的 ssh 配置文件:

vim /etc/ssh/sshd_config

新增一行(若之前有需先删除):

PermitRootLogin yes

启动 ssh 服务:

service sshd start

2 宿主机映射

将如下脚本写入到 wsl2-network.ps1 文件中,并放入 C:\Windows\System32

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
 
if( $found ){
    
    
  $remoteport = $matches[0];
} else{
    
    
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}
 
#[Ports]
 
#All the ports you want to forward separated by coma
$ports=@(22);
 
 
#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";
 
 
#Remove Firewall Exception Rules
#iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
 
#adding Exception Rules for inbound and outbound Rules
#iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
#iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
 
for( $i = 0; $i -lt $ports.length; $i++ ){
    
    
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}

以管理员权限打开 PowerShell,运行该文件:

cd C:\Windows\System32
.\wsl2-network.ps1

查看是否成功完成端口映射:

netsh interface portproxy show all

在这里插入图片描述

3 配置frp服务器

frp下载地址(https://github.com/fatedier/frp/releases/tag/v0.45.0),以目前最新的v0.45.0为例:
在这里插入图片描述
解压缩并进入文件夹:

tar -zxvf frp_0.45.0_linux_amd64.tar.gz
cd frp

编辑frps.ini文件:

vim frps.ini

写入如下内容:

[common]
bind_port = 6666

端口号可自由选择,此处以6666为例;

依次执行以下命令:

cp frps /usr/bin
mkdir /etc/frp
cp frps.ini /etc/frp

设置frps自启动:

vim /etc/systemd/system/frps.service

写入如下内容:

[Unit]
Description=My Frp Client Service - %i
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/bin/bash -c 'frps -c /etc/frp/frps.ini'

[Install]
WantedBy=multi-user.target                         

启动frps

systemctl start frps
systemctl enable frps

公网主机配置完成,同时需要在腾讯云控制台开放6666端口访问权限

4 宿主机连接frps服务器

宿主机下载frp,根据自身系统选择对应版本,同3,此处不再赘述

解压下载好的frp文件,修改其中的frpc.ini,写入如下内容:

[common]
server_addr = 公网服务器IP
server_port = 6666

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8888

remote_port可以自由选择,此处以8888为例;
注意:需要在腾讯云服务器控制台开放8888端口

在当前文件加打开PowerShell,启动frpc

.\frpc.exe -c .\frpc.ini

在这里插入图片描述

5 完结

现在,我们就可以在办公室连接家里的Wsl2服务器了:

ssh -p 8888 root@公网IP

猜你喜欢

转载自blog.csdn.net/airenKKK/article/details/127660989