Host Windows、Guest Ubuntu环境下为Ubuntu虚拟机设置静态IP并解决网络连通问题
老哥我太懂你折腾6+小时还没搞定的崩溃了!刚好我之前在类似的Windows静态IP宿主机+Ubuntu虚拟机环境踩过全坑,给你一步步捋清楚怎么把静态IP配好还能正常联网,满足你做自托管GitHub Action Runner的需求。
先搞清楚核心前提:
你宿主机是静态IP(DHCP禁用),所以虚拟机用桥接模式时,不能直接用宿主机的IP(会导致IP冲突),得选和宿主机同网段里没被占用的静态IP,这是基础!
第一步:先收集宿主机的关键网络信息
打开Windows的命令提示符(CMD),敲ipconfig /all,找到你正在用的以太网适配器(别找无线或VPN适配器,你是专用服务器肯定用的有线),把这几个信息抄下来:
- IPv4地址:比如宿主机是
192.168.1.100 - 子网掩码:比如
255.255.255.0(对应CIDR格式的/24) - 默认网关:比如
192.168.1.1 - DNS服务器:可以用公共DNS比如
8.8.8.8,也可以用你内网的DNS
第二步:配置VirtualBox的桥接网络
先把Ubuntu虚拟机关掉,打开VirtualBox的设置面板:
- 找到「网络」选项卡,选择「网卡1」
- 连接方式选「桥接适配器」
- 界面名称选你刚才在Windows里查到的那个以太网适配器(别选错!)
- 重点!一定要勾选「接入网线」(很多人漏了这个,相当于虚拟机没插网线,肯定没网)
- 确认设置后启动虚拟机
第三步:配置Ubuntu 24.04的静态IP(用netplan,这是当前版本的标准配置方式)
Ubuntu 24.04已经不用老版本的/etc/network/interfaces了,统一用netplan管理,步骤如下:
登录Ubuntu,打开终端,先看一下你的netplan配置文件叫什么:
ls /etc/netplan/一般是类似
00-installer-config.yaml或者01-netcfg.yaml的文件,记下来这个文件名。先备份原配置(以防改错了能恢复):
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak(把文件名换成你刚才查到的那个)
编辑配置文件,用nano编辑器就行:
sudo nano /etc/netplan/00-installer-config.yaml把里面的内容替换成下面的模板,注意替换成你之前收集的宿主机信息:
network: ethernets: enp0s3: # 这里是你的虚拟机网卡名,用`ip addr`命令可以查到,找带BROADCAST标记的那个(比如enp0s8) addresses: [192.168.1.101/24] # 这里填你要给虚拟机的静态IP,/24对应子网掩码255.255.255.0 gateway4: 192.168.1.1 # 填宿主机的默认网关 nameservers: addresses: [8.8.8.8, 1.1.1.1] # 填DNS服务器,也可以用宿主机的DNS version: 2⚠️ 敲黑板!YAML语法是个矫情鬼:
- 缩进必须用空格,绝对不能用Tab键!
- 每个冒号
:后面必须空一格,比如addresses: [xxx],冒号后面的空格不能少! - 网卡名一定要对应,填错了配置也不会生效。
保存退出nano:按
Ctrl+O,回车确认保存,再按Ctrl+X退出。应用配置并验证:
sudo netplan apply如果没报错,就运行
ip addr看你的网卡IP是不是你设置的静态值;然后ping一下网关:ping 192.168.1.1能通的话再ping外网:
ping google.com都通就说明网络正常了!
第四步:排查你遇到的「桥接后没网」常见坑
如果按上面步骤来还是没网,大概率是踩了这些坑:
- 坑1:桥接适配器选错了:一定要选宿主机正在用的有线以太网,别选VPN、无线或者其他虚拟适配器
- 坑2:YAML语法错误:再回去检查缩进、冒号后面的空格,哪怕错一个字符都可能导致配置失效
- 坑3:IP冲突:你选的虚拟机静态IP已经被内网其他设备占用了?在Windows里ping一下这个IP,如果能通就换一个没被用的
- 坑4:宿主机防火墙拦截:检查Windows Defender防火墙,有没有拦截虚拟机的流量?可以临时关闭防火墙测试,或者添加入站/出站规则允许虚拟机网段的所有流量
- 坑5:VirtualBox没勾「接入网线」:这个我之前踩过,没勾的话桥接等于白搭,虚拟机根本连不上物理网络
最后验证GitHub Action Runner可用性
静态IP配置好后,你就可以按照GitHub的文档安装自托管Runner了,因为IP是固定的,防火墙那边直接把这个静态IP加入白名单就行,再也不用担心IP变动导致的访问问题。
备注:内容来源于stack exchange,提问作者Uuuuuumm

