背景
采购了几台 Linux 机器用于开发测试,通过 ddns 服务可以在外网通过 ipv6 访问到这些机器。
由于物理机数量有限,单机配置过剩,需要拆分为多个虚拟机以便更多开发者使用,打算采取简单易用的 multipass
做虚拟机管理。
- 虚拟机需要能够通过外网连接,方便不在办公室的开发者使用
- 使用
multipass
创建虚拟机,默认 driver 为qemu
,不支持指定自定义网口,无法桥接到公司网络,外网就不能连接该机器 - 需将
multipass
默认 driver 改为lxd
, 创建桥接网络,将虚拟机桥接到公司网络 - 由于电信的 IP 是动态分配的,需执行计划任务,定期将最新的 IP 更新到域名解析上(DDNS)
其中 DDNS 是本地跑一个计划任务,每分钟将本机 ip 上报给一个 laf 云函数,云函数会将 ip 更新到域名解析上。
关于
multipass
,参考 multipass 安装和使用 。
安装和配置 multipass
1 | # install multipass |
创建 bridge 网卡 br0,在下面文件增加 bridges
字段部分:
1 | sudo vim /etc/netplan/00-installer-config.yaml |
1 | network: |
其中
enp6s0
是物理机的网卡,名字会和你的环境不一样,可以通过ip a
查看,替换为自己的实际的网卡名。
应用以上配置
1 | sudo netplan apply |
创建虚拟机
1 | multipass launch --name k1 -c 2 -m 4G -d 20G --network br0 |
定时更新 DNS
创建脚本 /ddns.sh
:1
2
3
4
5
6
7
8
9
10sudo cat > /ddns.sh << EOF
#ip=$(curl 6.ipw.cn)
ip=$(ip -f inet6 a | grep global | grep /128 | awk '{print $2}' | tr "/" ' ' | awk '{print $1}')
server=$(hostname)
curl "https://your_appid.lafyun.com/change-ip?key=xxxxx&server=$server&ip=$ip"
EOF
# 添加执行权限
sudo chmod +x /ddns.sh
添加到 crontab 中,crontab -e
:1
* * * * * /ddns.sh
DDNS 部分的配置和云函数代码接下来会单独写一篇文介绍。
其它
若宿主机器上没有 netplan 环境,可以通过以下命令安装:
1 | sudo apt-get install network-manager |