From 236e3654a37b867188be593023540c92c414312c Mon Sep 17 00:00:00 2001 From: hhf Date: Sat, 7 Dec 2024 15:32:13 +0530 Subject: [PATCH] Add unraid-config.sh --- unraid-config.sh | 116 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 unraid-config.sh diff --git a/unraid-config.sh b/unraid-config.sh new file mode 100644 index 0000000..84822a2 --- /dev/null +++ b/unraid-config.sh @@ -0,0 +1,116 @@ +#!/bin/bash + +# Unraid Network Configuration Script +# This script configures the game server routing through Tailscale + +# Color codes for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +# Configuration variables +TAILSCALE_INTERFACE="tailscale0" +WAN_INTERFACE="br0" # Typical Unraid bridge interface +VPS_IP="YOUR_VPS_IP" # Replace with your Dallas VPS IP +GAME_SUBNET="172.16.0.0/24" # Replace with your game servers' subnet + +# Function to check if script is run as root +check_root() { + if [ "$EUID" -ne 0 ]; then + echo -e "${RED}Error: This script must be run as root${NC}" + exit 1 + fi +} + +# Function to check if Tailscale is installed +check_tailscale() { + if ! command -v tailscale &> /dev/null; then + echo -e "${RED}Error: Tailscale is not installed${NC}" + exit 1 + fi +} + +# Function to configure iptables +configure_iptables() { + echo -e "${YELLOW}Configuring iptables rules...${NC}" + + # Clear existing rules + iptables -F + iptables -t nat -F + + # Set default policies + iptables -P INPUT ACCEPT + iptables -P FORWARD ACCEPT + iptables -P OUTPUT ACCEPT + + # Allow established connections + iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + + # UDP Ports + for port in 8766 8767 16261 19132; do + iptables -A INPUT -p udp --dport $port -j ACCEPT + iptables -A FORWARD -p udp --dport $port -j ACCEPT + done + + # TCP Port Ranges + iptables -A INPUT -p tcp --match multiport --dports 16262,27015:27050,25500:25600 -j ACCEPT + iptables -A FORWARD -p tcp --match multiport --dports 16262,27015:27050,25500:25600 -j ACCEPT + + # Route game traffic through Tailscale + iptables -t nat -A POSTROUTING -o $TAILSCALE_INTERFACE -j MASQUERADE + + echo -e "${GREEN}iptables rules configured successfully${NC}" +} + +# Function to configure routing +configure_routing() { + echo -e "${YELLOW}Configuring routing...${NC}" + + # Enable IP forwarding + echo 1 > /proc/sys/net/ipv4/ip_forward + + # Add route for game servers through Tailscale + ip route add $VPS_IP via $(ip route | grep $TAILSCALE_INTERFACE | awk '{print $1}') + + echo -e "${GREEN}Routing configured successfully${NC}" +} + +# Function to make settings persistent +make_persistent() { + echo -e "${YELLOW}Making settings persistent...${NC}" + + # Save iptables rules + if [ -d "/boot/config/iptables" ]; then + iptables-save > /boot/config/iptables/rules.v4 + echo -e "${GREEN}iptables rules saved to /boot/config/iptables/rules.v4${NC}" + else + mkdir -p /boot/config/iptables + iptables-save > /boot/config/iptables/rules.v4 + echo -e "${GREEN}Created iptables directory and saved rules${NC}" + fi + + # Ensure IP forwarding is enabled on boot + if ! grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf; then + echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf + fi +} + +# Main execution +main() { + echo -e "${YELLOW}Starting Unraid network configuration...${NC}" + + check_root + check_tailscale + configure_iptables + configure_routing + make_persistent + + echo -e "${GREEN}Unraid network configuration completed successfully${NC}" + echo -e "${YELLOW}Please test your game server connectivity${NC}" +} + +# Run main function +main + +exit 0 \ No newline at end of file