wsl2 桥接模式+ssh+vscode配置
使用本文档中使用的方法配置只需将.wslconfig的内容清空,再重启,wsl就会恢复nat模式,推荐使用镜像模式,有关镜像模式的详情请看这里。
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设置-CSDN博客
wsl2 + bridge 固定ip终极方案 - ywhb - 博客园 (cnblogs.com)
WSL2使用桥接网络,并指定IP - 流年灬似氺 - 博客园 (cnblogs.com)
Win11将WSL做SSH服务器,实现通过局域网SSH远程连接到WSL上,并且开机自动启动,手把手教学_wsl ssh-CSDN博客
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.conf
vs加入
[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模式
- 将
.wslconfig
中的配置信息修改为如下
[wsl2]
networkingMode=nat
vmSwitch=Default Switch
autoProxy=false
dnsTunneling=false
dhcp=true # 允许动态分配
ipv6=true
- 在控制面板中禁用虚拟网卡
WslBridge
,即之前创建的虚拟交换机后
- 重启以太网(禁用后再启用)
- 在wsl中执行`sudo rm /usr/lib/systemd/network/wsl_external.network
- 重启wsl
wsl --shutdown & wsl
8 写在最后
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)