Travel Router with VPN & Jellyfin Media Server

Travel router and Jellyfin setup

1. Project Overview

This project creates a portable travel router using a Raspberry Pi 5, routing traffic through a VPN via RaspAP and hosting a Jellyfin media server for offline movie streaming. The setup provides secure internet access and entertainment in a compact device.

2. Resources and References

Essential resources for the project:

Additional Notes: The YouTube tutorials were critical for clear, visual setup instructions.

3. Steps Taken

Detailed steps to build and configure the travel router and media server:

  1. Step 1: Assemble Hardware
    Description: Set up the Raspberry Pi 5 with the case, riser board, M.2 SSD, heat sink, and fan. Connected the external WiFi adapter.
    Challenges: Properly installing the heat sink to ensure adequate cooling.
    Heat sink installation
  2. Step 2: Install Raspberry Pi OS and Configure RaspAP
    Description: Configured the Raspberry Pi OS and set up RaspAP for VPN and WiFi hotspot functionality.
    Challenges: Ensuring WiFi adapter compatibility and resolving VNC display issues.
    • Used Raspberry Pi Imager to flash Raspberry Pi OS onto a microSD card and booted the Pi.
      Raspberry Pi Imager
    • Enabled SSH for remote access and verified WiFi adapter (wlan1) functionality.
    • Enabled VNC via terminal with sudo raspi-config, navigated to Interface Options, and turned on VNC.
      Enable VNC in raspi-config
    • Installed RaspAP by running "curl -sL https://install.raspap.com | bash" from raspap.com. Accepted most defaults, carefully reviewing the last few prompts.
    • Plugged in the external WiFi adapter (wlan1).
    • Accessed RaspAP web interface at default credentials (admin/secret), configured hotspot SSID, password, and country code.
      RaspAP web login
    • Removed preconfigured network connection with "sudo rm /etc/networkmanager/system-connections/preconfigured.nmconnection" in terminal and rebooted.
      Remove NetworkManager connection
    • Connected to the RaspAP hotspot and accessed the Pi via the default gateway LAN address.
      Connect to RaspAP hotspot
    • Connected to an external network (e.g., hotel WiFi) via RaspAP’s WiFi client, entering SSID and password.
      Connect to external WiFi
    • Reinstalled UI packages to fix VNC grey screen with "sudo apt install --reinstall raspberrypi-ui-mods lxsession" and rebooted.
    • Set up VNC client (e.g., RealVNC Viewer) using SSH credentials to bypass captive portals via VNC session and web browser.
      VNC captive portal bypass
  3. Step 3: Format and Mount M.2 SSD
    Description: Formatted and mounted the M.2 SSD for movie storage.
    Challenges: Ensuring the correct device path to avoid data loss during formatting.
    • Connected the M.2 SSD via the riser board. Ran lsblk to identify the SSD (e.g., /dev/nvme0n1). Formatted it with sudo mkfs.ext4 /dev/nvme0n1.
    • Created a mount point with sudo mkdir /mnt/ssd and mounted it with sudo mount /dev/nvme0n1 /mnt/ssd. Edited /etc/fstab to auto-mount on boot by adding /dev/nvme0n1 /mnt/ssd ext4 defaults 0 2. Copied movies to /mnt/ssd/movies.
  4. Jelly Fin logo
  5. Step 4: Install and Configure Jellyfin
    Description: Installed and configured Jellyfin for offline movie streaming.
    Challenges: Securing Jellyfin to allow only local LAN access.
    • Booted the Pi and opened a VNC session.
      VNC session
    • Visited the Jellyfin website, selected Linux server install, and ran curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash in terminal.
      Jellyfin installation
    • Copied the post-install URL (e.g., http://localhost:8096) from terminal to a web browser in the VNC session.
      Jellyfin web setup
    • Followed Jellyfin web setup, configured security and default settings.
    • Set permissions on the movie directory with chmod 777 /mnt/ssd/movies.
      Set movie directory permissions
    • Added /mnt/ssd/movies as a media library in Jellyfin.
    • In Jellyfin settings, under Networking, bound to the local address and set a static IP to restrict access to internal LAN (wlan0), blocking wlan1 (external WiFi) traffic.
      Jellyfin networking settings Jellyfin networking settings

4. Tips and Lessons Learned

Key insights from the project:

5. Hardware Links

6. Conclusion

The travel router and Jellyfin server project successfully delivered a portable device for secure VPN routing and offline movie streaming. The Raspberry Pi 5, with RaspAP and Jellyfin, offers robust functionality for travelers. This project enhanced skills in system configuration, network security, and media server management. Future plans include performance optimizations and additional features.

7. Additional Notes