每個命名空間一個公共 IP 地址
如何在我的 Ubuntu 14.04 伺服器中為每個命名空間關聯一個公共 IP 地址?我需要為每個命名空間啟動一個特定程序,然後為每個公共 IP 地址啟動。
我想這樣做:
配置:
nameSpace1 use: publicIP1 nameSpace2 use: publicIP2 nameSpace3 use: publicIP3
終端:
nameSpace1 ffmpeg etc... nameSpace2 ffmpeg etc... nameSpace2 youtube-dl etc... nameSpace2 streamlink etc... nameSpace3 ffmpeg etc...
部分答案,基於一些可能不正確的假設:
通常,網路命名空間提供對哪些網路介面對哪些程序可見的控制。將網路命名空間分配給介面將確保只有在該命名空間中執行的程序才能看到它。相反,在該命名空間中執行的程序只會在它們自己的命名空間中看到網路介面。
因此,基本上有兩種方法可以讓執行在命名空間中的程序與外部通信:(1)使用 將連接到外部的現有網路介面移動到命名空間中
ip link set
,以及(2)創建一個虛擬乙太網對(一種“管道”) “),將一端放在命名空間中,讓另一端保持全域,並為其設置路由,可選的 NAT 等。OVH似乎擁有(至少)
176.31.0.0/16
,並且根據此幫助頁面和一些調查whois
,他們將其劃分為 16 個 IP 地址的 4096 個塊,其中每個塊的第一個和最後四個保留供內部使用. 這也意味著他們要麼擁有少於 4096 個購買 RIPE 塊的客戶,要麼他們進行運營商級 NAT,並且您將與其他人共享您的 IP 地址。因此,如果您購買了一個
/28
RIPE 塊並獲得了例如該塊176.31.154.160/28
,第 15 個地址(176.31.154.175)用於廣播,第 14 個地址(176.31.154.174)是網關,您可以使用地址 176.31.154.161 到 176.31。 154.171。對於 OVH,通過創建
eth0
. 因此,我假設您的 11 個可用地址將以相同的方式處理。但是,有些人在這樣做時會報告問題,這可能與他們嘗試這樣做的特定方式有關,也可能無關。您可能還需要一個macvlan而不是虛擬地址介面/標籤才能將其移動到網路命名空間中。因此,按照慣例,您可能會使用mac0
(long formmac0@eth0
) 而不是eth0:0
下面使用的。假設這是正確的方法,無論需要什麼讓它工作,你最終都會得到每個可用地址的
eth0:0
介面eth0:10
。然後,您可以創建命名空間 (ip netns add space0
),將介面移動到此命名空間 (ip link set eth0:0 netns space0
),在命名空間 ( ) 中設置正確的路由,並在該命名空間 (ip netns exec space0 ip route add default via 176.31.154.174 dev eth0:0
) 中執行您的應用程序ip netns exec space0 ffmpeg ...
。如果您只是使用網路空間而不是成熟的容器,則處理 DNS 解析有點繁瑣,並且根據我的經驗將其限制在命名空間中並不總是有效(而且我還沒有找到修復它的好方法),雖然我有一個非常不同的設置,可能不適用於您的情況。因此,如果您在應用程序中使用主機名而不是原始 IP 地址,您可能會遇到問題,但解決這個問題可能值得另一個問題。
編輯:我想得越多,OVH 設置的地址塊和自己的廣播地址似乎就越是作為執行多個 VM 的一種手段:每個 VM 應該有自己的 IP 地址(而不是一個網路命名空間),然後你就有了一個私有 LAN 之類的東西,你的虛擬機可以在其中相互通信。所以我們很可能通過使用命名空間來濫用這個概念。
編輯:查看 OVH 的 VPS 優惠而不是幫助頁面,我看到他們提供了“13 個地理位置和 16 個 IP”選項。如果那是你買的,那又取決於他們是如何設置的。我找不到任何關於此的幫助頁面,所以我認為資訊在您收到的電子郵件中。如果您可以直接將這些 IP 地址分配給您的
eth0
介面,那麼過程基本上是相同的,儘管您可能需要不同的網關。另請注意,如果您只是執行 Web 伺服器,您通常可以告訴 Web 伺服器僅綁定到特定 IP(甚至綁定到多個 IP,並根據您綁定的 IP 採取不同的行為),所以您不需要在這種情況下需要網路空間。