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

也可以使用手動設置,只需要設定 vmbr0 的 iptables 規則。 例如想打開 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 建立
主題 Stack 由 Jimmy 設計