2021-02-13 07:05:20 -06:00
|
|
|
There are two main ways to set up networking on OS X / macOS, as it does not
|
|
|
|
function with what QEMU defaults to for network settings:
|
|
|
|
|
|
|
|
-----------------------------------
|
|
|
|
User Mode Networking (Easier Setup)
|
|
|
|
-----------------------------------
|
|
|
|
|
|
|
|
By default, QEMU uses user mode networking (SLiRP). This networking mode is the
|
|
|
|
slowest and is not visible via the outside network, but requires no host-side
|
|
|
|
setup, so it's perfect if you just want internet but don't care about latency
|
|
|
|
or about connecting to the VM from an external source.
|
|
|
|
|
|
|
|
In order to do this, change the line in your qemu-system-x86_64 command (found
|
|
|
|
in boot-macOS.sh) to the following:
|
|
|
|
|
|
|
|
-netdev user,id=net0 -device network_adapter,netdev=net0,id=net0,mac=52:54:00:c9:18:27 \
|
|
|
|
|
|
|
|
Once you set network_adapter to the preferred adapter, no further setup is required; your
|
|
|
|
internet should Just Werk™ in your virtual machine!
|
|
|
|
|
|
|
|
For further information on detailed configuration options, see QEMU's
|
|
|
|
documentation on networking ( http://wiki.qemu.org/Documentation/Networking )
|
|
|
|
|
|
|
|
Here is the list of network adapters supported by macOS,
|
|
|
|
|
|
|
|
e1000-82545em - The problem that we run into here is that OS X is nitpicky
|
|
|
|
about what emulated networking devices it is willing to accept. The
|
|
|
|
e1000-82545em is a known adapter that can be used on pretty much any version of
|
|
|
|
MacOS.
|
|
|
|
|
|
|
|
To use this adapter, replace network_adapter with e1000-82545em
|
|
|
|
|
2023-04-07 20:20:53 -05:00
|
|
|
vmxnet3,virtio-net-pci - An alternative solution to e1000. Instead of emulating
|
|
|
|
the e1000, these are paravirtualized NICs, which can allow for better
|
2021-02-13 07:05:20 -06:00
|
|
|
performance (in theory). The only catch is that the you need to have a recent
|
|
|
|
version of MacOS (10.11 or later).
|
|
|
|
|
2023-04-07 20:20:53 -05:00
|
|
|
To use these adapters, replace network_adapter with vmxnet3 or virtio-net-pci.
|
2021-02-13 07:05:20 -06:00
|
|
|
|
|
|
|
|
2023-04-07 20:20:53 -05:00
|
|
|
SSH access in user mode
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
Although the IP address of the VM is not visible to the outside, it is possible
|
|
|
|
to use port forwarding to access the VM's ports from your host, eg the SSH port.
|
|
|
|
To achieve that:
|
|
|
|
|
|
|
|
- In MacOS, turn on SSH under System Preferences > Sharing > Remote Login.
|
|
|
|
- Modify the startup script to include `-netdev user,id=net0,hostfwd=tcp::10022-:22`
|
|
|
|
- Use `ssh localhost -p10022` to get in.
|
|
|
|
|
|
|
|
You can use the same for VNC.
|
|
|
|
|
2021-02-13 07:05:20 -06:00
|
|
|
-----------------------------------
|
|
|
|
Tap Networking (Better Performance)
|
|
|
|
-----------------------------------
|
|
|
|
|
|
|
|
Installing "virt-manager" automagically creates the "virbr0" local private bridge :-)
|
|
|
|
|
|
|
|
sudo apt-get install uml-utilities virt-manager
|
|
|
|
|
|
|
|
sudo ip tuntap add dev tap0 mode tap
|
|
|
|
sudo ip link set tap0 up promisc on
|
|
|
|
sudo brctl addif virbr0 tap0
|
|
|
|
|
|
|
|
sudo ip link set dev virbr0 up # as needed
|
|
|
|
sudo ip link set dev tap0 master virbr0
|
|
|
|
|
|
|
|
Note: If `virbr0` network interface is not present on your system, it may
|
|
|
|
have been deactivated. Try enabling it by using the following commands,
|
|
|
|
|
|
|
|
virsh net-start default
|
|
|
|
virsh net-autostart default
|
|
|
|
|
|
|
|
Add "-netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27 \"
|
|
|
|
to your qemu-system-x86_64 command.
|
|
|
|
|
2023-04-07 20:20:53 -05:00
|
|
|
|
|
|
|
Using an rc.local startup script
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
I have the following commands present in `/etc/rc.local`.
|
|
|
|
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
sudo ip tuntap add dev tap0 mode tap
|
|
|
|
sudo ip link set tap0 up promisc on
|
|
|
|
sudo ip link set dev virbr0 up
|
|
|
|
sudo ip link set dev tap0 master virbr0
|
|
|
|
|
|
|
|
This has been enough for me so far.
|
|
|
|
|
|
|
|
Note: You may need to enable the `rc.local` functionality manually on modern
|
|
|
|
Ubuntu versions. Check out the [notes](notes.md) included in this repository
|
|
|
|
for details.
|
|
|
|
|
|
|
|
|
2021-02-13 07:05:20 -06:00
|
|
|
QEMU networking tip
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
# printf '52:54:00:AB:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256)) # generates QEMU compatible mac addresses!
|
|
|
|
|
|
|
|
|
|
|
|
------------------
|
|
|
|
Bridged Networking
|
|
|
|
------------------
|
|
|
|
|
|
|
|
QEMU defaults to using NAT for its guests. It has a built-in DHCP server that
|
|
|
|
provides addresses from the 192.168.12x.0 subnet. However, this configuration
|
|
|
|
makes file sharing, printer sharing, and other common networking activities
|
|
|
|
harder to use in a home network.
|
|
|
|
|
|
|
|
Bridged networking allows your QEMU guest to get an address on the same subnet
|
|
|
|
as the host computer. For example, many home networks let the wireless router
|
|
|
|
handle IP assignment via DHCP. Here are the steps for setting up the bridge.
|
|
|
|
|
|
|
|
To setup bridged networking from the command line, refer to this documentation
|
|
|
|
at the Ubuntu website. https://help.ubuntu.com/community/KVM/Networking
|
|
|
|
|
|
|
|
Ultimately, the script for booting the QEMU guest will need a line similar to
|
|
|
|
the following to enable bridged networking in the guest:
|
|
|
|
|
|
|
|
-netdev bridge,id=net0,br=virbr0,"helper=/usr/lib/qemu/qemu-bridge-helper"
|
|
|
|
|
|
|
|
On some systems the `qemu-bridge-helper` file has incorrect permissions. For it
|
|
|
|
to work, it needs to be setuid root. This can be accomplished with this command:
|
|
|
|
|
|
|
|
$ sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
|
|
|
|
|
|
|
|
Note that this is sometimes viewed as a security hole. Be careful and understand
|
|
|
|
what you are doing before running this command.
|
2023-04-07 20:20:53 -05:00
|
|
|
|
|
|
|
|
|
|
|
-----------------------
|
|
|
|
Bridged Networking 2023
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
sudo mkdir -p /etc/qemu
|
|
|
|
|
|
|
|
sudo cp bridge.conf /etc/qemu
|
|
|
|
|
|
|
|
sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
|
|
|
|
|
|
|
|
sudo ip link add name br0 type bridge
|
|
|
|
|
|
|
|
sudo ip link set dev br0 up
|
|
|
|
|
|
|
|
sudo ip link set enx00e04c680a67 master br0 && sudo dhclient br0
|
|
|
|
|
|
|
|
$ brctl show
|
|
|
|
bridge name bridge id STP enabled interfaces
|
|
|
|
br0 8000.ead0ee60b7c1 yes enx00e04c680a67
|
|
|
|
tap0
|
|
|
|
Use the following network device in scripts:
|
|
|
|
|
|
|
|
-netdev bridge,id=net0,br=br0,"helper=/usr/lib/qemu/qemu-bridge-helper" -device virtio-net-pci,netdev=net0,id=net0,mac=00:16:CB:00:11:34
|
|
|
|
|
|
|
|
Also see https://dortania.github.io/OpenCore-Post-Install/universal/iservices.html to tweak the config.plist file.
|