windows server 2019 中使用 wsl2 之 windows 转发 linux 端口 | 端口转发

问题:

wsl2每次启动后,ip都是变化的,我们也没法进行固定,因此除了宿主机,其他机器无法对其进行直接访问。于是我们就需要将其端口和windows端口进行绑定/转发。

1、方法1 Docker desktop for windows:

使用 docker desktop for windows ,然后 enable wsl2 , 然后绑定你的 wsl2服务。

然后 bash进入 linux子系统, docker run xxx -p 1234:1234 xxx 就可以了。

这样外部就可以访问 宿主ip+1234端口 对这个服务进行访问了。

2、方法2 通过powershell 命令来转发

如果有些东西,用docker反而麻烦一些,因此不愿意使用docker来运行,就需要用到这里了。

编写powershell脚本:forward.ps1

$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=@(80,443,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"; `
}

请自行 替换 命令中的 $ports=@(80,443,22) 为你所需要的端口们。我这里只转发 80、443、22这3个端口。

浏览全部

windows server 2019 中使用 wsl2 开启 启动服务

1、编写bat文件:

linux-start.bat:

wsl -d Ubuntu-20.04 -u root /etc/init.wsl

其中 Ubuntu-20.04 是我的 wsl2 子系统名,通过 wsl -l 查看

2、wsl2 子系统中添加init.wsl文件 vim /etc/init.wsl  :

#! /bin/sh
service nginx restart
service ssh restart
service cron restart
service php7.4-fpm restart

需要啥服务,自己加吧~!

3、添加计划任务,开机调用:

参考:windows server 2019 使用wsl2 开机挂载 物理磁盘

触发器里面,建议设置延迟 30秒。

这样,开机后,wsl2 中的服务,也就自动start了。

windows server 2019 使用wsl2 开机挂载 物理磁盘

PS: 要在wsl2中挂载物理盘,需要先将你要挂载的磁盘在 磁盘管理 里面 进行 “脱机”处理。

1、查看win上的磁盘列表:

确定磁盘

若要列出 Windows 中的可用磁盘,请运行:

wmic diskdrive list brief

 

磁盘路径位于 “DeviceID” 列下。 通常在 \\.\PHYSICALDRIVE* 格式下。

列出并选择要装入的分区 WSL 2

确定磁盘后,运行以下内容:

wsl --mount <DiskPath> --bare

 

这会使磁盘在 WSL 2 中可用。

附加后,可以通过在 WSL 2 中运行以下命令列出该分区:

lsblk

 

这会显示可用块设备及其分区。

在 Linux 内,块设备被标识为 /dev/<Device><Partition> 。 例如,/dev/sdb3 是磁盘的第3部分 sdb 。

示例输出:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0    1G  0 disk
├─sdb2   8:18   0   50M  0 part
├─sdb3   8:19   0  873M  0 part
└─sdb1   8:17   0  100M  0 part
sdc      8:32   0  256G  0 disk /
sda      8:0    0  256G  0 disk

 

标识 filesystem 类型

如果不知道磁盘或分区的文件系统类型,可以使用以下命令:

blkid <BlockDevice>

 

这会在 “) ” 格式下输出检测到的文件系统类型 (TYPE="<Filesystem>" 。

2、装载所选分区

确定要装载的分区后,请在每个分区上运行以下命令:

 

wsl --mount <DiskPath> --partition <PartitionNumber> --type <Filesystem>

3、卸载磁盘

wsl --unmount <DiskPath>

浏览全部

windows server 2019 安装 wsl2

PS: 目前要使用wsl2,win 2019需要安装 preview版本。

提供一个百度盘下载地址(因为超了4G,没会员,所以压缩分卷了):链接: https://pan.baidu.com/s/1zZ2VEUgYX2zEe0FLmy5DiQ 提取码: fuka

1、启动 linux 子系统

打开 posershell(管理员),输入:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

2、下载和安装

下载:

Windows server是没有Windows应用商店的,所以我们需要下载wsl系统的离线安装包,这里我选择下载kali,如果需要下载其他系统,可以点击下方链接自行下载或者从官方文档下载。官方下载速度非常慢,这里推荐大家使用IDM下载,我当前下载好了kali,并上传到了百度网盘(链接:https://pan.baidu.com/s/1GiNDbWQtcXbCa2ecrwiw9w 提取码:h7mg)

还有一个开源的WSL系统,

  • Fedora Remix for WSL(https://github.com/WhitewaterFoundry/Fedora-Remix-for-WSL/releases)可以下载其中后缀.appxbundle的文件尝试安装,不过这个系统我并未有过接触。具体安装可能需要自己探索

浏览全部

windows wsl 中使用 docker 的解决方案

前言:

由于某些原因,无法使用docker for win desktop,系统同样是win10,因此打上了wsl的主意。

我这边开发pc升级到win10 了。。监控软件(ioa) 不支持多网卡,用docker for win 会启用hyper-v ,会默认启动一个nat网卡,导致断网。。。。就研究了下wsl中跑docker

步骤:

1、安装windows子系统。这里不做详细叙述了。本文以ubuntu 18.04为例

2、安装`cgroupfs-mount`

sudo apt-get install cgroupfs-mount
sudo usermod -aG docker $USER

3、安装docker

#可以直接用apt源的老版本。
sudo apt-get install docker.io
#如果需要使用最新版本.使用如下代码
sudo apt-get remove docker docker-engine docker.io containerd runc
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

浏览全部

使用WSL在Windows Server 2016/2019上运行Linux的方法

一、在Windows上启用Windows的Windows子系统(WSL)功能

在为WSL安装任何Linux发行版之前,必须确保已启用“Windows Subsystem for Linux”功能。

以管理员身份打开Powershell并运行以下命令以在Windows上启用Windows Subsystem for Linux(WSL)功能:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

同意在出现提示时重新启动计算机:

使用WSL在Windows Server 2019上运行Linux的方法

你可以从服务器图形界面服务器管理器>添加角色和功能>选择功能执行相同操作(Server Manager>Add roles and features>Select features)。 浏览全部

windows server 2016 安装 docker-compose

如果要在具有Docker Engine-Enterprise的 Microsoft Windows Server上直接运行Docker守护程序和客户端,并要安装Docker Compose,请遵循以下说明。

  1. 启动PowerShell(以管理员身份运行)。搜索PowerShell,右键单击,然后选择 “以管理员身份运行”。当询问是否要允许该应用程序对设备进行更改时,请点击
  2. 在PowerShell中,由于GitHub现在需要TLS1.2,请运行以下命令:
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

     

  3. 然后运行以下命令以下载当前稳定的Compose版本(v1.25.4):
    Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\Docker\docker-compose.exe

    注意:在Windows Server 2019上,您可以将Compose可执行文件添加到中$Env:ProgramFiles\Docker。由于此目录已在系统中注册,因此PATH您可以docker-compose --version在后续步骤中运行该命令,而无需进行其他配置。

  4. 测试安装:
    docker-compose --version

     

windows server(2016\2019) 安装docker

win server 安装docker 需要安装企业版,社区版只支持win10

过程如下:

首先安装oneget PowerShell模块

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

再使用oneget 安装最新版本docker

Install-Package -Name docker -ProviderName DockerMsftProvider

powershell中询问你是否确实要安装来自“DockerDefault”的软件,选择“A”全是。

PS C:\> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
PS C:\> Install-Package -Name docker -ProviderName DockerMsftProvider

程序包来自未标记为“受信任”的程序包源。
是否确实要安装来自“DockerDefault”的软件?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): A
警告: A restart is required to start docker service. Please restart your machine.
警告: After the restart please start the docker service.

Name       Version   Source   Summary
----       -------   ------   -------
Docker       1.12.2-cs2-ws... DockerDefault Contains the CS Docker Engine for use with Windows ...

浏览全部