wsl2 桥接模式+ssh+vscode配置


tags:

  • wsl
  • vscode
  • 网络配置
    date: 2024-01-31
    number headings: auto, first-level 1, max 6, start-at 1, 1.1

wsl的最新版已经支持用图形化界面进行桥接设置,本教程仅适用于旧版

– 更新于2024.10.11

0.1 参考

[WSL 2] NIC Bridge mode 🖧 (Has TCP Workaround🔨) · Issue #4150 · microsoft/WSL (github.com)
WSL2 使用桥接网络上网与DNS的配置_wsl dns设置-优快云博客
wsl2 + bridge 固定ip终极方案 - ywhb - 博客园 (cnblogs.com)
WSL2使用桥接网络,并指定IP - 流年灬似氺 - 博客园 (cnblogs.com)
Win11将WSL做SSH服务器,实现通过局域网SSH远程连接到WSL上,并且开机自动启动,手把手教学_wsl ssh-优快云博客

1 目标

WSL 2 在物理机上进行了 NAT,而不是将其桥接到主机的同一局域网。我的目标是让 WSL 2 中的 Ubuntu 中运行的服务可以从本地网络上的任何位置访问。

2 创建虚拟网桥

2.1 开启 Hype-V

前提:使用windows 专业版,家庭版请参考这里

在控制面板中启用Hyper-V

请添加图片描述

2.2 使用Hyper-V 管理器配置虚拟交换机

在开始菜单搜索Hyper-V管理器

请添加图片描述
请添加图片描述

新建一个虚拟交换机,选择外部

请添加图片描述

请添加图片描述

名称可以自定义,这里设置为WslBridge, 选择自己要桥接到的网卡名称

请添加图片描述

3 配置 wsl2 为桥接模式

3.1 在windows中配置

在文件资源管理器的地址栏输入`%UserProfile%

请添加图片描述

新建.wslconfig,此文件默认为空,修改其中内容为下

[wsl2]
networkingMode=bridged  # 设置桥接模式
vmSwitch=WslBridge      # Hyper-V中建立的虚拟交换机名        
dhcp=false              # 关闭动态IP
[boot]
systemd=true            # 启用systemctl命令

启动wsl

3.2 在wsl中配置

执行 sudo vim /usr/lib/systemd/network/wsl_external.network 修改如下

注意 :当在.wslconfig中设置dhcp=false时会读取 /lib/systemd/network/wsl_external.network 的网络配置

[Match] 
Name=eth0 
[Network] 
Description=Ubuntu 
DHCP=false 
Address=192.168.1.137/24 # 设置为自己想设置的静态ip地址
Gateway=192.168.1.254    # 本地网关地址
DNS=8.8.8.8, 114.114.114.114

重启网络

sudo systemctl enable systemd-networkd # 设置网络服务开机自启动
sudo systemctl restart systemd-networkd

你会发现eth0已经为自定义的网络了

4 修改并固定DNS设置

直接使用桥接可能导致无法使用域名进行网络请求,需要修改DNS配置

4.1 修改DNS服务器

打开/etc/systemd/resolved.conf

取消注释 [Resolve] 里 DNS 那行,然后改成

DNS=8.8.8.8 114.114.114.114

重启域名解析服务

systemctl restart systemd-resolved
systemctl enable systemd-resolved

建立软链接

mv /etc/resolv.conf /etc/resolv.conf.bak ln -s /run/systemd/resolve/resolv.conf /etc/

4.2 注

为什么不直接更改 /etc/resolv.conf
直接更改后,重启 WSL 会自动恢复

4.3 固定dns设置

关闭wsl2的自动生成resolv.conf,避免覆盖刚刚建立的软链接

/etc/wsl.confvs加入

[network] 
generateResolvConf = false

4.4 重启wsl

wsl --shutdown

5 桥接模式下wsl2的ssh配置

桥接模式下,vscode中的wsl插件会无法正常工作,所以需要配置wsl的ssh连接,如果想查看如何在Nat模式下,从外部用ssh服务访问wsl,可以查看这里)

5.1 在WSL上安装OpenSSH

首先需要重装openssh,因为wsl中自带的ssh服务器无法正常工作,在wsl中执行如下命令

sudo apt-get remove openssh-server
sudo apt-get install openssh-server

卸载旧版本,安装新版本

5.2 修改ssh的配置文件

sudo vi /etc/ssh/sshd_config

将下面三项设置成(原本是被注释掉的):

  • Port 22
  • PermitRootLogin Yes
  • PasswordAuthentication Yes

5.3 重启ssh服务

sudo service ssh --full-restart

5.4 配置wsl开机自动启动ssh服务

sudo systemctl enable ssh

如果要关闭ssh的开机启动,运行以下命令

sudo systemctl disable ssh

6 配置vscode连接wsl

ifconig 查看wsl当前的ip地址

请添加图片描述

使用remote-ssh插件连接wsl

请添加图片描述

7 恢复Nat模式

在日常使用中,我们可能需要切换回nat模式

  1. .wslconfig中的配置信息修改为如下
[wsl2]
networkingMode=nat
vmSwitch=Default Switch
autoProxy=false
dnsTunneling=false
dhcp=true # 允许动态分配
ipv6=true
  1. 在控制面板中禁用虚拟网卡WslBridge,即之前创建的虚拟交换机后

请添加图片描述

  1. 重启以太网(禁用后再启用)
  2. 在wsl中执行`sudo rm /usr/lib/systemd/network/wsl_external.network
  3. 重启wsl
wsl --shutdown & wsl

8 写在最后

若无需外部访问wsl,推荐使用镜像模式,有关镜像模式的详情请看这里
想了解wsl的桥接模式原理,可以点击这里

在Windows上使用VSCode连接并操作Linux虚拟机,可以通过以下几种方法实现: ### 方法一:使用SSH连接 1. **安装SSH服务器**: 在Linux虚拟机上安装并启动SSH服务器。例如,在Ubuntu上可以使用以下命令: ```bash sudo apt update sudo apt install openssh-server sudo systemctl enable ssh sudo systemctl start ssh ``` 2. **获取虚拟机的IP地址**: 在Linux虚拟机上运行以下命令获取IP地址: ```bash ip addr show ``` 3. **配置Windows防火墙**: 确保Windows防火墙允许SSH连接(默认端口为22)。 4. **在VSCode中安装Remote - SSH扩展**: 打开VSCode,点击左侧的扩展图标,搜索“Remote - SSH”并安装。 5. **配置SSH连接**: 按 `Ctrl+Shift+P` 打开命令面板,输入“Ssh: Config”并选择“Remote-SSH: Open SSH Configuration File”。在配置文件中添加以下内容: ```plaintext Host my-linux-vm HostName <虚拟机IP地址> User <用户名> ``` 6. **连接虚拟机**: 按 `Ctrl+Shift+P` 打开命令面板,输入“Ssh: Connect”并选择“Remote-SSH: Connect to Host”。选择刚才配置的连接,输入密码或使用SSH密钥进行身份验证。 ### 方法二:使用WSL(Windows Subsystem for Linux) 1. **启用WSL**: 以管理员身份打开PowerShell并运行以下命令: ```powershell dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart ``` 2. **安装Linux发行版**: 前往Microsoft Store,搜索并安装你喜欢的Linux发行版(如Ubuntu)。 3. **配置VSCode**: 安装“Remote - WSL”扩展。打开命令面板,输入“Remote-WSL: New Window”并选择你的Linux发行版。 ### 方法三:使用虚拟机软件 1. **安装虚拟机软件**: 安装如VMware Workstation或Oracle VirtualBox等虚拟机软件。 2. **创建并启动Linux虚拟机**: 在虚拟机软件中创建一个新的Linux虚拟机并启动。 3. **配置网络**: 确保虚拟机和Windows主机在同一网络中,通常使用桥接网络或NAT网络。 4. **在VSCode中安装Remote - SSH扩展**: 同方法一中的步骤4。 5. **配置SSH连接**: 同方法一中的步骤5和6。 通过以上方法,你可以在Windows上的VSCode中方便地使用Linux虚拟机进行开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值