Page 1 of 1

SheepShaver networking

Posted: Sat Feb 23, 2019 7:55 pm
by adespoton
Lately I've been using VirtualBox with two network interfaces, and it got me to wondering: what would be involved in setting up SheepShaver so that you can have multiple network interfaces exposed at the same time?

VirtualBox has the following options that "just work":
NAT Network
Network Address Translation (NAT). If all you want is to browse the Web, download files, and view email inside the guest, then this default mode should be sufficient for you, and you can skip the rest of this section. Please note that there are certain limitations when using Windows file sharing. See Section 6.3.3, “NAT Limitations”.

NAT Network. A NAT network is a type of internal network that allows outbound connections. See Section 6.4, “Network Address Translation Service”.

Bridged networking. This is for more advanced networking needs, such as network simulations and running servers in a guest. When enabled, Oracle VM VirtualBox connects to one of your installed network cards and exchanges network packets directly, circumventing your host operating system's network stack.

Internal networking. This can be used to create a different kind of software-based network which is visible to selected virtual machines, but not to applications running on the host or to the outside world.

Host-only networking. This can be used to create a network containing the host and a set of virtual machines, without the need for the host's physical network interface. Instead, a virtual network interface, similar to a loopback interface, is created on the host, providing connectivity among virtual machines and the host.

Generic networking. Rarely used modes which share the same generic network interface, by allowing the user to select a driver which can be included with Oracle VM VirtualBox or be distributed in an extension pack.

The following sub-modes are available:

UDP Tunnel: Used to interconnect virtual machines running on different hosts directly, easily, and transparently, over an existing network infrastructure.

VDE (Virtual Distributed Ethernet) networking: Used to connect to a Virtual Distributed Ethernet switch on a Linux or a FreeBSD host. At the moment this option requires compilation of Oracle VM VirtualBox from sources, as the Oracle packages do not include it.
SS's SLIRP networking essentially provides the NAT service on a single network card. From what I can see, tuntap is similar to bridged networking.

However, you in SS you can only select one network card at a time, and there appear to be other options I've never used.

SS source indicates the following options:

So. All this said, has anyone successfully used network options other than SLIRP and TUNTAP? And how would we go about using two at the same time?

I'd love to set up a host-only card, a basic slirp for internet access, and an internal network, where multiple VMs and emulators can communicate locally over the same bridge. At the same time.

This should provide the best of all worlds for networking, where you can communicate with the host, the internet, and other local virtual devices without all the fiddling currently needed.

From the source, it appears slirp is stand-alone, ethertap binds to /dev/<ethernetDevice>, tuntap to /dev/net/tun, sheepnet to /dev/sheep_net, and vde to the macemu.vdesock interface in libvdeplug. From what I know, sheep_net is purely a linux option at this point, and I would guess libvdeplug is Windows-only.

Anyone up to the challenge of implementing multiple ethernet cards? So you could also have ether2, ether3, ether4 and ether5 in the prefs?

Anyone up to the challenge of adding a bridge option so that, for example, ether bridge vboxnet0 would bind to bridge device vboxnet0 if it exists, sort of like qemu does it?

Just some thoughts, as people seem to be poking at the source again. This could also be useful for BII, of course.

Re: SheepShaver networking

Posted: Thu Mar 19, 2020 3:14 am
by adespoton
Well, it's been over a year, but since we've been discussing networking lately, I thought I'd bring this back up. I'm really having headaches getting the notarized tap device to work under Catalina, but vboxnet0 "just works". Seems like it should work just as well for BII and SS as it works for VirtualBox; should work for QEMU too.

Re: SheepShaver networking

Posted: Thu Mar 19, 2020 7:00 am
by Cat_7
What is your actual problem? Getting the kext to load in Catalina?
What did you try up till now?


Re: SheepShaver networking

Posted: Thu Mar 19, 2020 7:08 pm
by adespoton
The problems are/were legion: I've extracted the tap-notarized.kext, stuck it in the Extensions folder, chown -R root:wheel and chmod -R go-w'd the bundle, rebooted into recovery mode and deleted the cached copies with the wrong permissions, and added the tap0 device to bridge0.

However, my Macs for the most part don't have a physical NIC; they're Airport-only. So I need to bring Airport up, then add it to bridge0, in order to get a semblance of Internet access -- and then I need to pull Airport back out of bridge0 before I switch networks, bring the interface down, or do anything else.

Also, when I'm spinning up a cluster of BII and SheepShaver images for virtual networking fun, I need to remember to track which one is using which tap device and script accordingly. With vboxnet0, I've always just dumped all devices into the same pool, and they've worked fine on the single interface.

Then there's the issue with sudo -- I've scripted a privilege escalation prompt, but it's a bit annoying to use, especially as I get an authentication prompt 5 seconds after each emulator has loaded, as well as the one when it first boots.

It just seems to me that we should be able to figure out a better way to do this, creating an open tunnel that all emulators can connect to, that can be linked to dynamically. For most of my purposes, the SLIrP connection is more than enough, but it would be great to be able to pass non-TCP data packets back and forth AND access the host AND access the internet all at the same time, on multiple emulator instances.