{"id":13552109,"url":"https://github.com/ariadata/proxmox-hetzner","last_synced_at":"2026-03-01T18:09:35.445Z","repository":{"id":132750625,"uuid":"494125935","full_name":"ariadata/proxmox-hetzner","owner":"ariadata","description":"Install Proxmox-VE on Hetzner dedicated-server without KVM console","archived":false,"fork":false,"pushed_at":"2025-08-07T14:18:48.000Z","size":69,"stargazers_count":193,"open_issues_count":2,"forks_count":61,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-08-07T15:39:46.360Z","etag":null,"topics":["dedicated-server","hetzner","installation","kvm","linux","proxmox","tutorial","virtualization"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ariadata.png","metadata":{"files":{"readme":"README-v1.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-19T15:22:14.000Z","updated_at":"2025-08-07T14:18:52.000Z","dependencies_parsed_at":"2024-01-15T15:47:39.954Z","dependency_job_id":"fdb39748-7c8c-4c10-bece-d00b4bf647ee","html_url":"https://github.com/ariadata/proxmox-hetzner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ariadata/proxmox-hetzner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariadata%2Fproxmox-hetzner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariadata%2Fproxmox-hetzner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariadata%2Fproxmox-hetzner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariadata%2Fproxmox-hetzner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ariadata","download_url":"https://codeload.github.com/ariadata/proxmox-hetzner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariadata%2Fproxmox-hetzner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29977974,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dedicated-server","hetzner","installation","kvm","linux","proxmox","tutorial","virtualization"],"created_at":"2024-08-01T12:01:59.030Z","updated_at":"2026-03-01T18:09:35.440Z","avatar_url":"https://github.com/ariadata.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"## Install Proxmox 7.4 on Hetzner Dedicated Server\r\n- iso mode with UEFI\r\n- 2 x NVMe SSD Drives\r\n\r\n\u003cimg src=\"https://github.com/ariadata/proxmox-hetzner/raw/main/files/icons/proxmox.png\" alt=\"Proxmox\" height=\"48\" /\u003e \u003cimg src=\"https://github.com/ariadata/proxmox-hetzner/raw/main/files/icons/hetzner.png\" alt=\"Hetzner\" height=\"38\" /\u003e \r\n\r\n![](https://img.shields.io/github/stars/ariadata/proxmox-hetzner.svg)\r\n![](https://img.shields.io/github/watchers/ariadata/proxmox-hetzner.svg)\r\n![](https://img.shields.io/github/forks/ariadata/proxmox-hetzner.svg)\r\n---\r\n### Assume that our servers info is :\r\n* My Interface name : `enp7s0`\r\n```shell\r\n# run this command to get your interface name\r\n(udevadm info -e | grep -m1 -A 20 ^P.*eth0 | grep ID_NET_NAME_PATH | cut -d'=' -f2)\r\n```\r\n\r\n* Main IP4 and Netmask : `148.251.235.75/27`\r\n```shell\r\n# run this command to get your main IP4 and Netmask\r\n(ip address show \"$(udevadm info -e | grep -m1 -A 20 ^P.*eth0 | grep ID_NET_NAME_PATH | cut -d'=' -f2)\" | grep global | grep \"inet \"| xargs | cut -d\" \" -f2)\r\n```\r\n\r\n* Main IP4 Gateway : `148.251.235.65`\r\n```shell\r\n# run this command to get your main IP4 Gateway\r\n(ip route | grep default | xargs | cut -d\" \" -f3)\r\n```\r\n\r\n* MAC address : `a8:a1:59:55:3b:43`\r\n```shell\r\n# run this command to get your MAC address\r\n(ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}')\r\n```\r\n\r\n* IPv6 CIDR : `2a01:4f8:201:3315::2/64`\r\n```shell\r\n# run this command to get your IPv6 CIDR\r\n(ip address show \"$(udevadm info -e | grep -m1 -A 20 ^P.*eth0 | grep ID_NET_NAME_PATH | cut -d'=' -f2)\" | grep global | grep \"inet6 \"| xargs | cut -d\" \" -f2)\r\n```\r\n\r\n* Public Subnet CIDR: `46.40.125.209/28`\r\n```shell\r\n# Get this from robot (hetzner)\r\n```\r\n\r\n* My private subnet : `192.168.20.0/24` with gateway `192.168.20.1` (choose your own subnet)\r\n\r\n---\r\n\r\n### Prepare the rescue from hetzner robot manager\r\n* Select the Rescue tab for the specific server, via the hetzner robot manager\r\n* * Operating system=Linux\r\n* * Architecture=64 bit\r\n* * Public key=*optional*\r\n* --\u003e Activate rescue system\r\n* Select the Reset tab for the specific server,\r\n* Check: Execute an automatic hardware reset\r\n* --\u003e Send\r\n* Wait a few mins\r\n* Connect via ssh/terminal to the rescue system running on your server\r\n\r\n#### Install requirements and Install Proxmox:\r\n```shell\r\napt -y install ovmf wget \r\nwget -O pve.iso http://download.proxmox.com/iso/proxmox-ve_7.3-1.iso\r\n```\r\n* For initial proxmox installer via `VNC` :\r\n```shell\r\n#### If UEFI Supported\r\nprintf \"change vnc password\\n%s\\n\" \"abcd_123456\" | qemu-system-x86_64 -enable-kvm -bios /usr/share/ovmf/OVMF.fd -cpu host -smp 4 -m 4096 -boot d -cdrom ./pve.iso -drive file=/dev/nvme0n1,format=raw,media=disk,if=virtio -drive file=/dev/nvme1n1,format=raw,media=disk,if=virtio -vnc :0,password -monitor stdio -no-reboot\r\n\r\n#### If UEFI NOT Supported\r\nprintf \"change vnc password\\n%s\\n\" \"abcd_123456\" | qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -m 4096 -boot d -cdrom ./pve.iso -drive file=/dev/nvme0n1,format=raw,media=disk,if=virtio -drive file=/dev/nvme1n1,format=raw,media=disk,if=virtio -vnc :0,password -monitor stdio -no-reboot\r\n```\r\n* Connect with `VNC client` to `148.251.235.75` with password `abcd_123456`\r\n\r\n* Install Proxmox and attention to these :\r\n  * choose `zfs` partition type\r\n  * choose `lz4` in compress type of advanced partitioning\r\n  * do not add real IP info in network configuration part (just leave defaults!)\r\n  * close VNC window after system rebooted and waits for reconnect\r\n\r\n\r\n* Run this command to bring up new installed proxmox in port `5555`\r\n```shell\r\n#### If UEFI Supported\r\nqemu-system-x86_64 -enable-kvm -bios /usr/share/ovmf/OVMF.fd -cpu host -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 -smp 4 -m 4096 -drive file=/dev/nvme0n1,format=raw,media=disk,if=virtio -drive file=/dev/nvme1n1,format=raw,media=disk,if=virtio\r\n\r\n#### If UEFI NOT Supported\r\nqemu-system-x86_64 -enable-kvm -cpu host -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 -smp 4 -m 4096 -drive file=/dev/nvme0n1,format=raw,media=disk,if=virtio -drive file=/dev/nvme1n1,format=raw,media=disk,if=virtio\r\n```\r\n* Login via SSH or ([WinSCP](https://winscp.net/eng/download.php)) To `148.251.235.75` with port `5555` with password that you entered during install.\r\n\r\n#### Edit `/etc/network/interfaces` file due to your requirements : \r\n* Use this template for basic interface. (**change parameters manually**)\r\n* For `Main IP` replace these lines to contents of file  :\r\n* for `Main vmbr0` you can use automatic creation with this command :\r\n```sh\r\n## run this in rescue session\r\nbash \u003c(curl -sSL https://github.com/ariadata/proxmox-hetzner/raw/main/files/update_main_vmbr0_basic_from_template.sh)\r\n```\r\nOr Continue with manual way : \r\n\r\n```apacheconf\r\n# network interface settings; autogenerated\r\n# Please do NOT modify this file directly, unless you know what\r\n# you're doing.\r\n#\r\n# If you want to manage parts of the network configuration manually,\r\n# please utilize the 'source' or 'source-directory' directives to do\r\n# so.\r\n# PVE will preserve these directives, but will NOT read its network\r\n# configuration from sourced files, so do not attempt to move any of\r\n# the PVE managed interfaces into external files!\r\n\r\nsource /etc/network/interfaces.d/*\r\n\r\nauto lo\r\niface lo inet loopback\r\n\r\niface lo inet6 loopback\r\n\r\niface enp7s0 inet manual\r\n\r\nauto vmbr0\r\niface vmbr0 inet static\r\n    address 148.251.235.75/27\r\n    gateway 148.251.235.65\r\n    bridge-ports enp7s0\r\n    bridge-stp off\r\n    bridge-fd 1\r\n    bridge-vlan-aware yes\r\n    bridge-vids 2-4094\r\n    hwaddress a8:a1:59:55:3b:43\r\n    pointopoint 148.251.235.65\r\n    up sysctl -p\r\n\r\niface vmbr0 inet6 static\r\n    address 2a01:4f8:201:3315::2/64\r\n    gateway fe80::1\r\n```\r\n\r\n* For `private subnet` append these lines to interface file  :\r\n```apacheconf\r\nauto vmbr1\r\niface vmbr1 inet static\r\n    address 192.168.20.1/24\r\n    bridge-ports none\r\n    bridge-stp off\r\n    bridge-fd 0\r\n    post-up   iptables -t nat -A POSTROUTING -s '192.168.20.0/24' -o vmbr0 -j MASQUERADE\r\n    post-down iptables -t nat -D POSTROUTING -s '192.168.20.0/24' -o vmbr0 -j MASQUERADE\r\n    post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1\r\n    post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1\r\n\r\niface vmbr1 inet6 static\r\n\taddress 2a01:4f8:201:3315:1::1/80\r\n```\r\n\r\n* For `public subnet` append these lines to interface file (first-Usable-IP/subnet) :\r\n```apacheconf\r\nauto vmbr2\r\niface vmbr2 inet static\r\n    address 46.40.125.209/28\r\n    bridge-ports none\r\n    bridge-stp off\r\n    bridge-fd 0\r\n\r\niface vmbr2 inet6 static\r\n    address 2a01:4f8:201:3315:2::1/80\r\n```\r\n\r\n* For `vlan support` append these lines to interface file  :\r\n  * You have to create a vswitch with ID `4000` in your robot panel of hetzner. \r\n```apacheconf\r\nauto vlan4000\r\niface vlan4000 inet static\r\n    address 10.0.1.5/24\r\n    mtu 1400\r\n    vlan-raw-device vmbr0\r\n    up ip route add 10.0.0.0/16 via 10.0.1.1 dev vlan4000\r\n    down ip route del 10.0.0.0/16 via 10.0.1.1 dev vlan4000\r\n```\r\n\r\n* Poweroff `ssh with port 5555`: \r\n```shell\r\npoweroff\r\n```\r\n\r\n* Reboot main `rescue` ssh :\r\n```shell\r\nreboot\r\n```\r\n\r\n* after a few minutes , login again to your proxmox server with ssh on port `22`\r\n\r\n### Post Install : \r\n* Config hostname,timezone and resolv file :\r\n```shell\r\nhostnamectl set-hostname proxmox-example\r\ntimedatectl set-timezone Europe/Istanbul\r\nprintf \"nameserver 1.1.1.1\\nnameserver 2606:4700:4700::1111\\n\" \u003e /etc/resolv.conf\r\n```\r\n* edit `/etc/hosts` file like this :\r\n```apacheconf\r\n127.0.0.1 localhost.localdomain localhost\r\n148.251.235.75 proxmox-example\r\n::1     ip6-localhost ip6-loopback\r\nfe00::0 ip6-localnet\r\nff00::0 ip6-mcastprefix\r\nff02::1 ip6-allnodes\r\nff02::2 ip6-allrouters\r\nff02::3 ip6-allhosts\r\n2a01:4f8:201:3315::2 proxmox-example\r\n```\r\n\r\n* run this commands:\r\n```shell\r\nsystemctl disable --now rpcbind rpcbind.socket\r\n\r\nsed -i 's/^\\([^#].*\\)/# \\1/g' /etc/apt/sources.list.d/pve-enterprise.list\r\n\r\necho \"deb [arch=amd64] http://download.proxmox.com/debian/pve bullseye pve-no-subscription\" \u003e /etc/apt/sources.list.d/pve-no-subscription-repo.list\r\n\r\nsed -i \"s|ftp.*.debian.org|ftp.debian.org|g\" /etc/apt/sources.list\r\n\r\napt update \u0026\u0026 apt -y upgrade \u0026\u0026 apt -y autoremove\r\n\r\npveupgrade\r\n\r\nsed -Ezi.bak \"s/(Ext.Msg.show\\(\\{\\s+title: gettext\\('No valid sub)/void\\(\\{ \\/\\/\\1/g\" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js \u0026\u0026 systemctl restart pveproxy.service\r\n\r\napt install -y libguestfs-tools unzip iptables-persistent\r\n\r\n# apt install net-tools\r\n\r\necho \"nf_conntrack\" \u003e\u003e /etc/modules\r\necho \"net.ipv4.ip_forward=1\" \u003e\u003e /etc/sysctl.d/99-proxmox.conf\r\necho \"net.ipv6.conf.all.forwarding=1\" \u003e\u003e /etc/sysctl.d/99-proxmox.conf\r\necho \"net.netfilter.nf_conntrack_max=1048576\" \u003e\u003e /etc/sysctl.d/99-proxmox.conf\r\necho \"net.netfilter.nf_conntrack_tcp_timeout_established=28800\" \u003e\u003e /etc/sysctl.d/99-proxmox.conf\r\n\r\n```\r\n\r\n* Limit ZFS Memory Usage According to [This Link](https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_limit_memory_usage) :\r\n```shell\r\necho \"options zfs zfs_arc_min=$[6 * 1024*1024*1024]\" \u003e\u003e /etc/modprobe.d/99-zfs.conf\r\necho \"options zfs zfs_arc_max=$[12 * 1024*1024*1024]\" \u003e\u003e /etc/modprobe.d/99-zfs.conf\r\nupdate-initramfs -u\r\n```\r\n\r\n* Update system , ssh port and root password , add lxc templates ,then `reboot` your system!\r\n```shell\r\napt update \u0026\u0026 apt -y upgrade \u0026\u0026 apt -y autoremove\r\nbash \u003c(curl -Ls https://gist.github.com/pcmehrdad/2fbc9651a6cff249f0576b784fdadef0/raw)\r\npasswd\r\npveam update\r\nreboot\r\n```\r\n#### Login to `Web GUI`:\r\n**https://IP_ADDRESS:8006/**\r\n\r\n#### Do other configs like this : \r\n\u003e MASQUERADE and NAT rules, by using samples [example](https://github.com/ariadata/proxmox-hetzner/raw/main/files/iptables-sample) | \r\n[rules.v4](https://github.com/ariadata/proxmox-hetzner/blob/main/files/rules.v4) |\r\n[rules.v6](https://github.com/ariadata/proxmox-hetzner/blob/main/files/rules.v6)\r\n```bash\r\niptables -t nat -A PREROUTING -d 1234/32 -p tcp --dport 10001 -j DNAT --to 192.168.20.100:22\r\niptables -t nat -A PREROUTING -d 1.2.3.4/32 -p tcp -m multiport --dports 80,443,8181 -j DNAT --to-destination 192.168.1.2\r\n```\r\n\r\n#### Some useful links :\r\n```\r\nhttps://github.com/extremeshok/xshok-proxmox\r\nhttps://github.com/extremeshok/xshok-proxmox/tree/master/hetzner\r\nhttps://88plug.com/linux/what-to-do-after-you-install-proxmox/\r\nhttps://gist.github.com/gushmazuko/9208438b7be6ac4e6476529385047bbb\r\nhttps://github.com/johnknott/proxmox-hetzner-autoconfigure\r\nhttps://github.com/CasCas2/proxmox-hetzner\r\nhttps://github.com/west17m/hetzner-proxmox\r\nhttps://github.com/SOlangsam/hetzner-proxmox-nat\r\nhttps://github.com/HoleInTheSeat/ProxmoxStater\r\nhttps://github.com/rloyaute/proxmox-iptables-hetzner\r\n```\r\n\r\n[Useful Helpers](https://tteck.github.io/Proxmox/)\r\n\r\n[firewalld-cmd](https://computingforgeeks.com/how-to-install-and-configure-firewalld-on-debian/)\r\n\r\n[proxmox-setup on blog](https://mehrdad.ariadata.co/notes/proxmox-setup-network-on-hetzner/)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fariadata%2Fproxmox-hetzner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fariadata%2Fproxmox-hetzner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fariadata%2Fproxmox-hetzner/lists"}