最近两天我一直在努力解决这个问题,但是无论我在这个帖子或其他地方都找不到解决方法。最终我通过整合我看到的几个东西来解决了这个问题,我想在这里发布我的解决方案以帮助其他人。但是有一些注意事项。首先,我绝对不是Linux大师,所以"能工作"就是我唯一的考虑因素 :) 其次,这是在家里的开发服务器上,这意味着安全性不是我最关心的问题(服务器没有以任何方式暴露在我的局域网之外),因此我做了一些我在真正重要的机器上不会做的事情。最后,我不需要让它始终工作,也就是说,如果需要,在服务器重新启动后,我可以自己手动完成所有的操作。
在这一点上,第一步是像上面所述的那样,将WSL适配器与服务器的物理适配器桥接起来。在我的情况下,服务器具有静态IP地址,因此我为IPv4配置了Network Bridge适配器的静态IP、网关和DNS服务器。
之后,我在我的主目录中编写了以下名为startup_tasks.sh的脚本:
#!/bin/bash
clear
echo Running startup tasks...
sudo ip addr flush eth0
echo .
sleep 2
sudo ip addr add 192.168.1.100/24 dev eth0
echo .
sleep 2
sudo ip route del default
echo .
sleep 2
sudo ip route add default via 192.168.1.1
echo .
sleep 2
sudo rm /etc/resolv.conf
echo .
sleep 2
sudo touch /etc/resolv.conf
echo .
sleep 2
sudo chmod 777 /etc/resolv.conf
echo .
sleep 2
sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo .
sleep 2
sudo echo "nameserver 1.1.1.1" >> /etc/resolv.conf
echo .
sleep 2
echo - Static IP set
echo .
echo ...done!
为了让这个工作正常运行,我还需要确保我的用户帐户具有无需密码的sudo权限,因此将其添加到sudoer文件中:
devuser=(ALL) NOPASSWD:ALL
在服务器重新启动后,我只需运行该脚本,结果是WSL会获得一个静态IP地址,并且我运行的所有服务器(尽管我从上面的脚本中删除了所有Docker容器)都可以访问。
对我来说,这非常简单。
我还考虑过编写一个简单的.vbs文件,并将其放入启动文件夹中,以在重新启动后自动运行该脚本。 这应该可以很好地工作并使一切完全自动化,但我还没有去做。