Initial commit
This commit is contained in:
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
# OPT-IN: create a NetworkManager bridge (br0) that enslaves a physical NIC, so
|
||||
# libvirt/qemu VMs get real LAN IPs (DHCP from your router) instead of NAT.
|
||||
#
|
||||
# Host-specific (NIC name differs per machine) and briefly drops the wired link,
|
||||
# so this is NOT part of run.sh. Run once per machine, locally (not over the
|
||||
# very link you're bridging):
|
||||
# sudo ./kvm-bridge.sh [iface] # iface defaults to the connected ethernet
|
||||
#
|
||||
# For a STATIC bridge IP instead of DHCP, after running this:
|
||||
# nmcli connection modify br0 ipv4.method manual \
|
||||
# ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8
|
||||
# nmcli connection up br0
|
||||
set -euo pipefail
|
||||
[ "$(id -u)" -eq 0 ] || { echo "run as root"; exit 1; }
|
||||
|
||||
IFACE="${1:-$(nmcli -t -f DEVICE,TYPE,STATE device status \
|
||||
| awk -F: '$2=="ethernet" && $3=="connected"{print $1; exit}')}"
|
||||
[ -n "$IFACE" ] || { echo "no connected ethernet found — pass the interface name"; exit 1; }
|
||||
echo "Bridging $IFACE into br0 (the wired connection will blip)."
|
||||
|
||||
# let qemu's bridge helper use br0
|
||||
install -d /etc/qemu
|
||||
grep -qxF 'allow br0' /etc/qemu/bridge.conf 2>/dev/null || echo 'allow br0' >> /etc/qemu/bridge.conf
|
||||
|
||||
# bridge + slave (DHCP on the bridge by default); idempotent
|
||||
nmcli connection show br0 >/dev/null 2>&1 \
|
||||
|| nmcli connection add type bridge con-name br0 ifname br0
|
||||
nmcli connection show "bridge-slave-$IFACE" >/dev/null 2>&1 \
|
||||
|| nmcli connection add type ethernet con-name "bridge-slave-$IFACE" ifname "$IFACE" master br0
|
||||
|
||||
nmcli connection up br0
|
||||
echo "Done. Point VMs at bridge 'br0' (virt-manager: Bridge device → br0)."
|
||||
Reference in New Issue
Block a user