From 74272172adec9d968212ba610e459ee9f974c34a Mon Sep 17 00:00:00 2001 From: Artem Lajko Date: Sat, 16 Dec 2023 23:03:19 +0100 Subject: [PATCH] add old script back and allow to use extended script --- README.md | 12 +++ script/network_config_updated.sh | 158 +++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100755 script/network_config_updated.sh diff --git a/README.md b/README.md index c9b75cb..e9a7756 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,8 @@ You'll need to request a MAC address for the IP address. This MAC address will b ## 4. Config Network +**Note:** they are a newer version of the network configuration script in the folder `script` called `network_config_updated.sh` which has Multiple IP Address Support, User Confirmation Process, Dynamic Bridge Interface Creation and Improved User Interaction. You can see the whole change under the [pull request](https://github.com/la-cc/hetzner-proxmox-single/pull/3) + Clone this git repository and execute the script: ./script/nework_config.sh @@ -127,3 +129,13 @@ You will see the ADD-IP-Address. So SNAT is working and you can extend to config Default credentials are set to **username:** **_admin_** with **password:** **_pfsense_**. ## **Finished, enjoy your Proxmox Environment!** + +# Contribution + +If you're eager to contribute to this script, feel free to fork the repository and submit a pull request. Your input is valued and always welcome! + +Current Contributors: + +@L-U-C-K-Y +@V-JobDone +@la-cc diff --git a/script/network_config_updated.sh b/script/network_config_updated.sh new file mode 100755 index 0000000..70f1751 --- /dev/null +++ b/script/network_config_updated.sh @@ -0,0 +1,158 @@ +#!/bin/bash + +# Function to prompt for input with a default value +prompt_input() { + local prompt=$1 + local default=$2 + read -p "$prompt [$default]: " input + echo "${input:-$default}" +} + +# Function to create bridge interface text for additional IP and internal bridges +create_bridge_text() { + local ip=$1 + local bridge_id=$2 + local mac_address=$3 + local external_bridge_id=$bridge_id + local internal_bridge_id=$((bridge_id * 100)) + + # WAN bridge configuration with MAC address and public IP + local bridge_config=" +auto vmbr${external_bridge_id} +iface vmbr${external_bridge_id} inet static + address ${ip} + netmask ${NETMASK} + bridge_ports none + bridge_stp off + bridge_fd 0 + hwaddress ether ${mac_address} +#WAN ${external_bridge_id} +" + + # LAN bridge configuration without an IP, as it's for internal network only + bridge_config+=" +auto vmbr${internal_bridge_id} +iface vmbr${internal_bridge_id} inet manual + bridge_ports none + bridge_stp off + bridge_fd 0 +#LAN ${internal_bridge_id} +" + + echo "$bridge_config" +} + +# Collect inputs +MAINSERVERIP=$(prompt_input "MAIN_SERVER_IP" "192.168.0.1") +GATEWAYADDRESS=$(prompt_input "MAIN_SERVER_GATEWAY_ADDRESS" "192.168.0.254") +NETMASK=$(prompt_input "NETMASK" "255.255.255.0") +BROADCASTIP=$(prompt_input "BROADCASTIP" "192.168.0.255") +ADD_IP_ADDRESSES=$(prompt_input "ADDITIONAL_IP_ADDRESSES (comma-separated)" "") +MAC_ADDRESSES=$(prompt_input "MAC_ADDRESSES for additional IPs (comma-separated)" "") +NETWORK_INTERFACE=$(prompt_input "NETWORK_INTERFACE" "eth0") + +# Display inputs for confirmation +echo "---------------------------------------------------------------------" +echo "You have entered the following configuration:" +echo "MAIN_SERVER_IP: $MAINSERVERIP" +echo "MAIN_SERVER_GATEWAY_ADDRESS: $GATEWAYADDRESS" +echo "NETMASK: $NETMASK" +echo "BROADCASTIP: $BROADCASTIP" +echo "ADDITIONAL_IP_ADDRESSES: $ADD_IP_ADDRESSES" +echo "MAC_ADDRESSES: $MAC_ADDRESSES" +echo "NETWORK_INTERFACE: $NETWORK_INTERFACE" + +echo "---------------------------------------------------------------------" +read -p "Is this correct? [yes/no]: " confirmation + +if [[ $confirmation != [Yy]* ]]; then + echo "Exiting without changes." + exit +fi + +# Split ADD_IP_ADDRESSES and MAC_ADDRESSES into arrays +IFS=',' read -ra ADDR <<<"$ADD_IP_ADDRESSES" +IFS=',' read -ra MACS <<<"$MAC_ADDRESSES" + +# Generate dynamic routing rules +additional_routes="" +for add_ip in "${ADDR[@]}"; do + additional_routes+=" up ip route add $add_ip dev ${NETWORK_INTERFACE} +" +done + +# Initialize the interfaces file content +interfaces_content=" +### Hetzner Online GmbH installimage + +source /etc/network/interfaces.d/* + +auto lo +iface lo inet loopback +iface lo inet6 loopback + +# Main network interface configuration +iface ${NETWORK_INTERFACE} inet manual + up ip route add -net ${GATEWAYADDRESS} netmask ${NETMASK} gw ${GATEWAYADDRESS} vmbr0 + up sysctl -w net.ipv4.ip_forward=1 + up sysctl -w net.ipv4.conf.${NETWORK_INTERFACE}.send_redirects=0 + up sysctl -w net.ipv6.conf.all.forwarding=1 +$additional_routes + up ip route add 192.168.0.0/16 via ${MAINSERVERIP} dev vmbr0 + up ip route add 172.16.0.0/12 via ${MAINSERVERIP} dev vmbr0 + up ip route add 10.0.0.0/8 via ${MAINSERVERIP} dev vmbr0 + +auto vmbr0 +iface vmbr0 inet static + address ${MAINSERVERIP} + netmask 32 + gateway ${GATEWAYADDRESS} + broadcast ${BROADCASTIP} + bridge-ports ${NETWORK_INTERFACE} + bridge-stp off + bridge-fd 0 + pointopoint ${GATEWAYADDRESS} +#Main IP configuration +" + +# Append bridge interfaces for each additional IP and MAC address and create internal bridges +for i in "${!ADDR[@]}"; do + # Increment bridge_id for each additional IP + bridge_id=$((i + 1)) + interfaces_content+=$(create_bridge_text "${ADDR[i]}" "$bridge_id" "${MACS[i]}") +done + +# Save the new configuration to a temporary file +echo "$interfaces_content" > /tmp/new_interfaces + +# Display the current network configuration +echo "---------------------------------------------------------------------" +echo "Current network configuration (/etc/network/interfaces):" +cat /etc/network/interfaces +echo "" + +# Display the new network configuration +echo "---------------------------------------------------------------------" +echo "New network configuration:" +cat /tmp/new_interfaces +echo "" + +# Show the differences +echo "---------------------------------------------------------------------" +echo "Configuration differences:" +diff /etc/network/interfaces /tmp/new_interfaces +echo "" + +# Confirm before applying changes +echo "---------------------------------------------------------------------" +read -p "Apply this network configuration? [yes/no]: " apply_conf + +if [[ $apply_conf == [Yy]* ]]; then + timestamp=$(date +%Y%m%d-%H%M%S) + mv /etc/network/interfaces /etc/network/interfaces.bak-$timestamp + mv /tmp/new_interfaces /etc/network/interfaces + echo "The network can be restarted with the following command: '/etc/init.d/networking' restart or 'systemctl restart networking'" +else + echo "Exiting without applying changes." + rm /tmp/new_interfaces +fi