在/etc/sysctl.conf中添加:net.ipv6.conf.all.proxy_ndp=1
然后执行sysctl -p
关闭ip6tables等操作
1.proxmox桥接网卡配置:
# /etc/network/interfaces
### Hetzner Online GmbH - installimage
# Loopback device:
auto lo
iface lo inet loopback
#
# device: eth0
auto eth0
iface eth0 inet static
address <Main IP>
netmask 255.255.255.255
pointopoint <Gateway>
gateway <Gateway>
#
iface eth0 inet6 static
address <Address from the IPv6 Subnet> #eg: 2001:db8::2
netmask 128
gateway fe80::1
up sysctl -p
# for single IPs
auto vmbr0
iface vmbr0 inet static
address 10.0.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
#
iface vmbr0 inet6 static
address <Address from the IPv6 Subnet> #eg: 2001:db8::2
netmask 64
复制代码
关于Nat链接网络请使用iptables实现。
solusvm下网卡配置:
主网卡中默认配置请不要修改,仅需将IPV6ADDR的/64换为/128
例如:IPV6ADDR= 2001:db8::2/128
然后将桥接网卡更改为:
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=10.0.1.1
NETMASK=255.255.255.0
IPV6ADDR=2001:db8::2/64
复制代码
关于联网与端口映射请使用iptables
关于虚拟机(kvm)的配置:
这里拿2001:db8::此ipv6做示范
Debian or Ubuntu:
iface eth0 inet6 static
address 2001:db8::f001
netmask 64
gateway 2001:db8::2
Centos:
IPV6INIT=yes
IPV6ADDR=2001:db8::f001/64
IPV6_DEFAULTGW=2001:db8::2
发表自我的小博客:https://eqblog.com/hetzner-proxmox-solusvm-nat-kvm-ipv6.html
关于iptables的设置:
端口映射:
iptables -t nat -A PREROUTING -d main_ip -p tcp -m tcp --dport ssh_port -j DNAT --to-destination user_ip:22
main_ip为你公网Ip ssh_port为公网映射端口 user_ip为你nat分配的IP
联网:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source main_ip
10.0.1.0/24为你分配的内网IP段 main_ip为公网IP
類型一:傳統的“網站託管網關”
第一種可能性是,您的託管提供者為您提供了一個大型IPv6 子網路(通常是/64),告訴您該子網路中的哪個IP 用作網關,並且對該IP 空間內使用多個MAC 位址沒有任何限制。我們稱之為“網頁寄存網關”,因為虛擬機器將使用的預設網關由提供者的網路交換器或路由器託管。這是配置 IPv6 支援的最簡單方法,但它會給網路交換器或路由器帶來沉重負擔,因此並非所有提供者都允許這樣做。
在此配置中,IPv6 設定與配置 SolusVM 使用的 IPv4 區塊的標準方法沒有太大差異:
步驟 1 – 確保您的主機節點能夠正確轉送 IPv6
預設情況下,您的 VPS 主機的核心可能未設定為透過它轉送 IPv6。VPS主機節點無需配置IPv6位址。然而,核心仍然需要被告知將 IPv6 流量轉送到 VPS。
為此,您需要為 sysctl 設定一些核心標誌以在啟動時處理。讓我們建立一個新檔案:
$nano /etc/sysctl.d/ipv6solus.conf
並添加以下內核標誌:
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
net.ipv6.conf.br0.forwarding = 1
net.ipv4.ip_forward = 1
接下來我們需要重新讀取內核標誌。我們可以透過執行以下操作而無需重新啟動即可做到這一點:
$sysctl --system
現在,讓我們驗證更改。您應該會看到包含新變更的輸出:
Applying /etc/sysctl.d/ipv6solus.conf
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
net.ipv4.ip_forward = 1
net.ipv6.conf.br0.forwarding = 1
步驟 2 – 在 SolusVM 中新增 IPv6 區塊
SolusVM作為虛擬化控制面板,負責為您建立的虛擬機器指派IP位址。為此,需要告知哪些 IP 詳細資訊適合此任務。因此,在這裡,您將取得指派給您的 IPv6 子網,並在 SolusVM 中對其進行設定。
請務必使用您的託管提供者提供的資訊填寫以下欄位:
- 區塊名稱
- 無論您覺得方便或有意義的名稱。
- 預設網關
- 由您的託管提供者提供給您
- 網關分配
- “預設網關”
- 預留 0000
- 檢查這個
- 預留0001
- 檢查此項,它可能是您的預設網關
- 預訂 FFFF
- 檢查這個
- 網路遮罩
- 由您的主機供應商選擇子網路大小,通常為 /64
- 名稱伺服器
- 通常,最好只需點擊“Google”或“OpenDNS”即可讓您的 VPS 使用這些公共 DNS 解析器。
- IPv6 子網路區塊
- 使用“網站託管網關”時取消選中此框,就像我們在這裡一樣
- 節點
- 選擇此 IP 區塊應用於哪個節點。
- 您可以為每台專用伺服器擁有一個 IPv6 子網路。如果是這樣,請僅選取 IPv6 區塊指派到的特定伺服器的核取方塊。
- 或者,您可能有一個在多台伺服器之間共用的 IPv6 子網路。
- 選擇此 IP 區塊應用於哪個節點。
步驟 3 – 為您的新區塊產生一些可用的 IP。
就像新的 IPv4 區塊一樣,您需要將可用位址新增至 IPv6 池中。由於可能的 IPv6 位址有很多,Solus 有一個內建工具,可以為您的區塊產生可用的唯一位址。
您需要填寫最後兩段(應保留為「自動」)之外的完整 IPv6 範圍,然後按一下「產生」。這會將 100 個可用 IPv6 位址新增至池中以分發給您的虛擬機器。如果您需要更多地址,只需重複此步驟即可產生更多地址。
步驟 4 – 設定現有的 IPv6 計劃
為了讓您的現有計畫能夠利用 IPv6 區塊,您必須在設定期間允許 1 個或多個 IPv6 位址。編輯您的計劃,然後簡單地填寫 IPv6 位址區塊以及您想要分配給每個新虛擬機器的數量。
如果您的託管提供者使用這種更基本的方法,那麼您現在應該完成了!所有新虛擬機器都應取得 IPv6 位址,並且可以手動編輯任何現有虛擬機器以指派 IPv6 位址。請記住,如果您編輯現有虛擬機器以擁有新的 IPv6 位址,則仍需要手動設定來賓作業系統,或者您需要使用虛擬機器控制面板中的「重新配置網路」選項才能使用它。
類型2:「路由子網路」分配方法
實施IPv6 的第二種主要方式是讓您的託管提供者為您分配一個/64 子網路以供虛擬機器使用,同時也為您分配一個較小的“連結子網路”,例如/126 作為主機伺服器的主接口。在這種情況下,/64 子網路不會分配網關位址 - 整個 /64 子網路將使用「連結子網路」轉送/路由到主機伺服器上的單一 IP 位址。然後,您的伺服器將充當路由器,將流量傳遞到 /64 子網路中的虛擬機,並使用連結子網路返回您的託管提供者。
此類配置的原因是為了限制路由器需要追蹤的 IP 位址數量。/64 子網路可以擁有數十億個 IP 位址,而路由器可以追蹤的 IP 數量通常只有幾千個。因此,如果同時使用大量 IPv6 位址,將路由器作為預設閘道可能會導致網路不穩定。透過將整個 /64 作為一個整體區塊路由到您的伺服器,可以避免這種情況。在這種情況下,您的伺服器會追蹤哪些虛擬機器正在使用每個 IP 位址,並相應地將流量路由到您的虛擬機器。
在這種類型的網路配置中,您將在更基本的場景中執行上述所有操作,並執行以下附加步驟:
步驟 1 – 將每個子網路的 IPv6 位址設定到您的節點上
與基本配置不同,在基本配置中,無需將節點配置為在 IPv6 上使用位址進行實際通信,此設定將要求您將網路設定為具有來自鏈路子網路的本地 IP 位址以及新的「主機節點上的大塊設定中的「網關」位址。這是為了確保您的虛擬機器具有其網關的目標 IP,並且您的節點可以與連結子網路上的 IPv6 路由器進行通訊。
首先,假設節點的主要 IP 配置位於橋接介面上,我們需要為其編輯網路設定檔。
$nano /etc/sysconfig/network-scripts/ifcfg-br0
我們需要將以下項目新增到設定檔:
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6ADDR=****:****:****::3/124
IPV6ADDR_SECONDARIES="****:****:****:****::1/64"
IPV6FORWARDING=yes
NETWORKING_IPV6=yes
IPV6_DEFAULTDEV=br0
IPV6_DEFAULTGW=****:****:****::1
筆記:
- IPV6ADDR 將是您的連結子網路內部的 IP,您的大塊將靜態路由到該 IP。
- IPv6_DEFAULTGW 將是您的主機指派給您的閘道 IP ,位於您的連結子網路內。
- IPV6ADDR_SECONDARIES 將是您的大塊內的網關位址,您的虛擬機器將配置為使用該位址。
設定完成後,只需重新啟動網路或重新啟動節點即可:
$systemctl restart network
由於大塊靜態路由到節點上目前的連結子網路 IP,因此路由器會將所有 IPv6 流量靜態路由到您的伺服器,因此需要可以存取該位址。這意味著您可以從大塊中選擇任何 IP 作為虛擬機器的新「網關」。對於此範例,我們僅使用 ::1 位址。
步驟 2 – 在 SolusVM 中新增 IPv6 區塊
此步驟也與簡單方法中的步驟 2 相同,但唯一的區別是您需要將網關位址指定為您在節點上設定為「網關」的 IP 位址。這是您為IPV6ADDR_SECONDARIES值所選擇的值
使用此流程,我能夠設定 3 個具有多個 /64 子網路的獨立節點,全部為我們的客戶提供 IPv6 網路池,同時避免交換器硬體潛在的大量資源使用。
此處的所有步驟都將相同,因為您的大型區塊和連結子網路現在已在節點上設定。
如前所述,這些步驟讓您的節點處理通常發生在預設閘道上的鄰居表/位址解析。這將減輕網路路由器/交換器的壓力,並允許更大的整體網路擴展。
依照上述過程,我們能夠輕鬆設定 3 個獨立的節點,每個節點都有自己的 /64 子網路。這允許向客戶端提供 IPv6 網路池,同時避免交換器硬體潛在的大量資源使用。
你完成了!
無論您的網路需要傳統的「網站託管網關」方法還是「路由子網路」分配方法,上述步驟都應該讓您處於良好狀態。
我希望本文能提供如何使用 SolusVM 為 VPS 客戶實施 IPv6 的有用概要。在 IOFLOOD,我們努力提供這樣的“高影響力幫助”,我們可以利用我們的知識在幾分鐘內快速解決客戶需要花費數小時或數天才能自行解決的問題。作為非託管主機有助於為能夠自行處理大部分事務的客戶保持較低的價格,同時我們也盡力為常見問題提供協助。這對於那些只需要偶爾幫助的客戶來說是兩全其美的。
如果您想與這種類型的託管提供者開展業務,請與我們聯絡!您可以透過sales[at]ioflood.com聯絡我們,或在我們的主頁上查看我們的可用伺服器