自用的PVE也有5,6台虚拟机了,以前远程访问都是靠在每台虚拟机上安装tailscale,这也是官方推荐的方法,但是这样会开很多个tailscale进程,浪费内存资源,虽然可以利用tailscale subnet 实现点对网访问,但是如果直接使用tailscale subnet代理整个局域网,会导致局域网内部安装有tailscale的设备通信出现问题,于是就有了本文介绍的方案,仅利用一个位于 lxc 中的 tailscale 进程即可访问全部虚拟机,且不影响局域网工作。

原理

利用Subnet 与PVE虚拟交换机,实现远程所有虚拟机!-1767357325460.webp|527x361
这样就可以使subnet流量经由虚拟交换机处理,所有流量传输均在PVE主机内部完成,不影响局域网。

配置虚拟交换机

首先打开 pve 后台,依次点击pve节点,网络,创建,跟随下方图片操作,在弹出的选项中选择Linux Bridge。
005-vmbr.webp|700x356
弹出的面板中,只需要修改IPV4/CIDR,我这里使用10.0.0.1/24网段,您也可以使用其他局域网网段,修改完成后点击创建即可。
005-linux-bridge.webp

创建LXC容器

新建LXC的流程就不过多赘述了,建议使用debian12模板,创建完成之后先来到 LXC 的网络面板,点击上方的添加。
005-lxc-network.webp
名称随便填,桥接选择刚刚创建好的Linux Bridge名称,我这里是vmbr1,IPv4/CIDR 填写一个位于刚刚Linux Bridge网段下的IP,网关不用填写,点击添加即可。
005-lxc-network-1.webp
如果 lxc 为开启状态,进行一下重启。

安装 TailScale

正常登录Tailscale后台,点击Add device,选择Linux server。
005-tailscale.webp
Tags没有有需求建议关掉。
005-ts-tags.webp
其他的选项无需改动,点击最下方的生成脚本,复制下来。
005-script.webp粘贴到LXC Shell中,等待安装完成即可。

配置 Subnet

首先启用IP转发功能,在LXC中执行(注意检查sudo是否安装)

1
2
3
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

添加子网路由

1
sudo tailscale set --advertise-routes=10.0.0.0/24 

回到Tailscale管理面板,启用子网路由。
564x420563x463
Subnet 配置完毕

连接虚拟机到网络

打开虚拟机管理页面
526x338
桥接选刚刚的Linux Bridge
利用Subnet 与PVE虚拟交换机,实现远程所有虚拟机!-1767357060352.webp
最后在系统中,设置此网卡的IP设置为一个10.0.0.0/24网段下的IP即可,子网掩码填写 255.255.255.0,大多数情况够用。

至此配置完毕,现在可以直接使用10.0.0.x IP访问虚拟机。