Featured image of post 在 Hetzner 伺服器上安裝 Proxmox VE,並使用 NAT 轉發

在 Hetzner 伺服器上安裝 Proxmox VE,並使用 NAT 轉發

在 Hetzner 伺服器上安裝 Proxmox VE,以便在伺服器上運行虛擬機和容器。只使用一個 IP 位址,並且不需要使用 Hetzner 的網絡功能。

最後更新
約 1426 字

啟用救援模式

  1. 在 Hetzner 的 Robot 後台,選擇您的伺服器,然後點擊 Rescue,選擇 Linux,然後點擊 Activate Rescue System
  2. 點擊 Rest,然後點擊 Execute an automatic hardware reset,最後點擊 Send
  3. 伺服器會重啟,並且進入救援模式。

安裝 Proxmox VE

  1. 以 SSH 登錄到救援模式。
  2. 安裝 Proxmox VE,執行 installimage,選擇 Debian 12 (Bookworm)。
  3. 留意 Hostname 會是 Proxmox VE 的節點名稱,例如 pve1.example.com 將會自動設定節點名稱為 pve1
  4. 設定 RAID 模式和磁碟分區。
  5. 儲存設定後,系統會開始安裝 Proxmox VE。

初步設定 PVE

https://{SERVER_IP}:8006/ 上訪問 Proxmox VE 的 Web 介面,在左邊的節點,然後選取 Shell,執行以下代碼。

這個腳本提供了管理 Proxmox VE 倉庫的選項,包括停用企業倉庫、新增或更正 PVE 源、啟用無訂閱倉庫、新增測試倉庫、停用訂閱提示、更新 Proxmox VE 和重新啟動系統。

1
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)"

啟用 IP 轉發

1
2
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sed -i 's/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/' /etc/sysctl.conf

套用更改:

1
sysctl -p

檢查轉發是否啟用:

1
2
sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding

設定 Masquerading (NAT) 轉發

要將虛擬機 / LXC 容器暴露到互聯網上,可以在不組態/擁有任何其他公共額外 IP 地址的情況下實現。

由於 Hetzner 有嚴格的 IP/MAC 綁定,這意味著如果流量沒有正確路由,將被認為是濫用並可能導致伺服器封鎖。為了避免這個問題,我們可以通過主機的主介面將 LXC/VM 的流量路由。這確保了 MAC 地址在所有網絡封包中是相同的。

Masquerading 使具有私有 IP 地址的虛擬機通過主機的公共 IP 地址進行出站通訊的互聯網訪問。

iptables 修改每個傳出的數據封包,使其看起來像是來自主機,並且調整傳入的回覆,以便可以將其定向回初始發送者。

在以下示例中,enp5s0 是主機的主介面,vmbr0 是 Proxmox VE 的虛擬橋接介面。

198.51.100.10 是主機的公共 IP 地址,198.51.100.1 是主機的網關 IP 地址。

22, 8006 是主機的 SSH 和 Web 介面連接埠,172.16.16.2 是 Proxmox VE 中的虛擬機的私有 IP 地址。 172.16.16.1 是 Proxmox VE 的虛擬橋接介面的私有 IP 地址。 172.16.16.0 是 Proxmox VE 中的虛擬機的私有子網。

這些 IP 地址是示例,可以根據實際情況進行更改。IPv4 的私有地址可以參考 WIKI: 專用網絡 ,不一定要使用 172.16.16.1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# /etc/network/interfaces

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto enp5s0
iface enp5s0 inet static
        address 198.51.100.10/24
        gateway 198.51.100.1/24
        #post-up iptables -t nat -A PREROUTING -i enp5s0 -p tcp -m multiport ! --dports 22,8006 -j DNAT --to 172.16.16.2
        #post-down iptables -t nat -D PREROUTING -i enp5s0 -p tcp -m multiport ! --dports 22,8006 -j DNAT --to 172.16.16.2

auto vmbr0
iface vmbr0 inet static
        address 172.16.16.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   iptables -t nat -A POSTROUTING -s '172.16.16.0/24' -o enp5s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '172.16.16.0/24' -o enp5s0 -j MASQUERADE
#NAT/Masq

留意這些規則(下面)對於 LXC/VM 的互聯網訪問並不是必要的。這個規則是可選的,並且用於實現對特定 VM/容器的外部訪問。

它將所有傳入的流量,除了連接埠 22 和 8006 以外都重新導向到子網中的指定虛擬機。

這裡 22 被排除,所以將仍然可以通過 SSH 連接到 Proxmox,而 8006 是 Web 介面的連接埠。

這將實現類似於 DMZ 的效果,其中所有流量都被路由到特定的虛擬機,可以建立一個轉發服務器,例如 Nginx Proxy Manager,然後將流量路由到其他虛擬機。

1
2
post-up iptables -t nat -A PREROUTING -i enp0s31f6 -p tcp -m multiport ! --dports 22,8006 -j DNAT --to 172.16.16.2
post-down iptables -t nat -D PREROUTING -i enp0s31f6 -p tcp -m multiport ! --dports 22,8006 -j DNAT --to 172.16.16.2

也可以使用手動設置,只需要設定 vmbr0iptables 規則。 例如想打開 8007 連接埠到 PBS 伺服器,可以使用以下規則,當中 post-up 為啟用規則,post-down 為關閉規則。

1
2
post-up   iptables -t nat -A PREROUTING -i enp5s0 -p tcp --dport 8007 -j DNAT --to 172.16.16.40:8007
post-down iptables -t nat -D PREROUTING -i enp5s0 -p tcp --dport 8007 -j DNAT --to 172.16.16.40:8007

完整 vmbr0 示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
auto vmbr0
iface vmbr0 inet static
        address 172.16.16.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '172.16.16.0/24' -o enp5s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '172.16.16.0/24' -o enp5s0 -j MASQUERADE
        post-up   iptables -t nat -A PREROUTING -i enp5s0 -p tcp --dport 8007 -j DNAT --to 172.16.16.40:8007
        post-down iptables -t nat -D PREROUTING -i enp5s0 -p tcp --dport 8007 -j DNAT --to 172.16.16.40:8007
        post-up   iptables -t nat -A PREROUTING -i enp5s0 -p tcp --dport 80 -j DNAT --to 172.16.16.20:80
        post-down iptables -t nat -D PREROUTING -i enp5s0 -p tcp --dport 80 -j DNAT --to 172.16.16.20:80
        post-up   iptables -t nat -A PREROUTING -i enp5s0 -p tcp --dport 443 -j DNAT --to 172.16.16.20:443
        post-down iptables -t nat -D PREROUTING -i enp5s0 -p tcp --dport 443 -j DNAT --to 172.16.16.20:443

套用更改:

1
ifreload -a

使用 Hugo 建立
主題 StackJimmy 設計