Your understanding of my problem is 100 % correct! Here’s the Windows script that I’m using today, and it’s been working great for allowing remote access to my Plex server:
@echo off
setlocal
set PATH=%SystemRoot%\system32;%SystemRoot%\system32\wbem;%SystemRoot%
chcp 437>nul
echo VPN Bypass for Plex Media Server
echo by XFlak
echo.
::get Default Gateway
ipconfig|findstr /I /C:“Default Gateway”|findstr /I /C:“1” >“%temp%\gateway.txt”
set /p gateway= <“%temp%\gateway.txt”
set gateway=%gateway:*: =%
::echo %gateway%
::If gateway is detected incorrectly, override it by uncommenting the below like (delete :
and input your correct gateway
::set gateway=192.168.2.1
echo Getting plex.tv’s current IP addresses…
echo.
echo Note: Log of plex.tv’s routed IP’s saved here:
echo %userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt
echo.
nslookup “plex.tv”|findstr /I /V “Server: Address: Name: timeout” >“%temp%\temp.txt”
findstr /I /C:" " “%temp%\temp.txt” >“%temp%\plex.tv.txt”
echo.
cd /d “%temp%”
for /F “tokens=*” %%A in (plex.tv.txt) do call :list %%A
goto:donelist
:list
set PlexIP=%*
set PlexIP=%PlexIP:* =%
echo %PlexIP%
if not exist “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt” goto:skipcheck
findstr /I /C:“%PlexIP%” “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt”>nul
IF NOT ERRORLEVEL 1 (echo IP already routed, skipping…) & (goto:EOF)
:skipcheck
echo route -p add %PlexIP% mask 255.255.255.255 %gateway%
route -p add %PlexIP% mask 255.255.255.255 %gateway%
echo.
echo %PlexIP% >>“%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt”
goto:EOF
:donelist
::clean no longer used IPs
echo.
echo Removing routed IPs no longer used by plex.tv
echo.
if exist “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs2.txt” del “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs2.txt”>nul
if not exist “%userprofile%\AppData\Local\Plex Media Server” goto:doneclean
if not exist “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt” goto:doneclean
cd /d “%userprofile%\AppData\Local\Plex Media Server”
for /F “tokens=*” %%A in (PermittedPlexIPs.txt) do call :clean %%A
goto:doneclean
:clean
set PlexIP=%*
findstr /I /C:“%PlexIP%” “%temp%\plex.tv.txt” >nul
IF ERRORLEVEL 1 goto:remove
echo IP still used: %PlexIP%
echo %PlexIP% >>“%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs2.txt”
goto:EOF
:remove
echo IP no longer used: route delete %PlexIP%
route delete %PlexIP%
goto:EOF
:doneclean
if exist “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt” del “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt”>nul
if exist “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs2.txt” move /y “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs2.txt” “%userprofile%\AppData\Local\Plex Media Server\PermittedPlexIPs.txt”>nul
echo.
echo Finished, exiting…
@ping 127.0.0.1 -n 3 -w 1000> nul
::pause
exit
::Other route commands
::route print
::route -p add 54.241.0.0 mask 255.255.0.0 192.168.2.1
::route delete 54.241.0.0 mask 255.255.0.0
::route -f
Edit: I agree it seems logical to not run Windows as a VM just for the sake of one single script. I don’t have the knowledge needed to rewrite this script for Unraid, so I’ll check out the subreddits you suggested!