YES! I got it working! Erin, I love you!
I did things a bit differently so here is my setup:
Step 1: I disabled "Connect Mac to this Network" in the Parallels Desktop preferences (NOT THE VM PREFS!). This is to avoid any conflicts
Step 2: I made and ran a little script as root to initialize my feth devices:
Code:
#!/bin/bash
# 1. Create the fake ethernet pair
ifconfig feth0 create
ifconfig feth1 create
ifconfig feth0 peer feth1
# 2. Assign the Mac host side your gateway subnet IP
ifconfig feth0 10.37.129.2 netmask 255.255.255.0 up
# 3. Bring the peer link up
ifconfig feth1 up
# 4. Attach the peer directly to the unassigned Parallels switch
ifconfig bridge101 addm feth1
# 5. Force the bridge interface to an active state
ifconfig bridge101 up
Step 3: Make sure the VM is still using Host-Only
Step 4: Edit /Library/Preferences/SystemConfiguration/preferences.plist
Unfortunately, this has to be done manually because feth devices aren't reconized or whatever (another Apple mystery), but thankfully I know this work-around from having to make "Services" for various devices hidden to network services.
Three parts of this file have to be edited perfectly:
a) Quit System Preferences and MAKE SURE IT ISN'T RUNNING! If it's still running it will overwrite your edits!
Code:
ps ax |grep settings
b) Generate a UUID
Code:
❯ uuidgen
4E9A5DC9-F3CB-407B-A503-6EDE7100CDA9
c) add a service. Here is mine:
Code:
<key>4E9A5DC9-F3CB-407B-A503-6EDE7100CDA9</key>
<dict>
<key>DNS</key>
<dict/>
<key>IPv4</key>
<dict>
<key>ConfigMethod</key>
<string>Manual</string>
</dict>
<key>IPv6</key>
<dict>
<key>ConfigMethod</key>
<string>Automatic</string>
</dict>
<key>Interface</key>
<dict>
<key>DeviceName</key>
<string>feth0</string>
<key>Hardware</key>
<string>Ethernet</string>
<key>Type</key>
<string>Ethernet</string>
<key>UserDefinedName</key>
<string>Fake Ethernet (feth0)</string>
</dict>
<key>Proxies</key>
<dict>
<key>ExceptionsList</key>
<array>
<string>*.local</string>
<string>169.254/16</string>
</array>
<key>FTPPassive</key>
<integer>1</integer>
</dict>
<key>SMB</key>
<dict/>
<key>UserDefinedName</key>
<string>Fake Ethernet (feth0)</string>
</dict>
d) Edit the "Service" list by adding another entry. I copied and pasted one of the existing entries and changed BOTH UUID keys:
Code:
<key>4E9A5DC9-F3CB-407B-A503-6EDE7100CDA9</key>
<dict>
<key>__LINK__</key>
<string>/NetworkServices/4E9A5DC9-F3CB-407B-A503-6EDE7100CDA9</string>
</dict>
e) Edit the "ServiceOrder" by adding another entry. Again, I copy/pasted one of the existing entries and changed the UUID:
Code:
<key>ServiceOrder</key>
<array>
<string>4E9A5DC9-F3CB-407B-A503-6EDE7100CDA9</string>
f) Having edited ALL THREE locations in the file, do a syntax check:
Code:
plutil /Library/Preferences/SystemConfiguration/preferences.plist
g) BACKUP THE FILE! The system loves to revert all this work
h) kill configd
Code:
sudo killall configd
i) Go to System Preferences -> Network. There should now be a new service called Fake Ethernet. Configure it by setting the
IP to 10.37.129.2
subnet to 255.255.255.0
router to the VM's IP (in my case 10.37.129.7)
DNS to something appropriate like 8.8.8.8 or 1.1.1.1 or whatever matches your router's DNS
Violà! You should now have internet via the router running as a VM!
Thank you again, Erin! This setup is a million times better than fussing around with wireguard. I owe you a drink or something.