Networking

具有自定義邏輯的橋接器/路由器

  • November 17, 2014

我有一個帶有 3 個網路適配器的 Linux 機器,我想配置如下:

  1. 適配器 A 連接到電腦 A
  2. 適配器 B 連接到電腦 B
  3. 適配器 C 已連接到 Internet。具體來說,到 someserver.com

我想要達到的目標:

  1. 來自 A 的所有流量都將流向 Internet
  2. 在適配器 B 上定義一個特殊的“秘密埠”
  3. 從電腦 B 到“秘密埠”上的“someserver.com”的 TCP 流量將偽裝其源 IP,使其看起來像來自電腦 A
  4. 從“someserver.com”返回到電腦 A 到 #3 中使用的相同埠的 TCP 流量將重定向到電腦 B。

我需要實現路由器還是網橋?我可以僅通過配置 NetFitler/ip 表來做到這一點,還是應該實現一些程式碼?如果是程式碼,我在哪一層與 IP 堆棧集成?

對於一般訪問,您必須使用 MASQUARADE / SNAT(取決於您在 C 上的 IP 地址是動態的還是靜態的)。

因此,假設目前情況是您的電腦 A具有靜態 IP 地址a.a.a.a,而您的電腦 B具有靜態 IP 地址 b.b.b.b。兩者都有到電腦 C的預設網關。Someserver.com靜態 IP 地址r.r.r.r和秘密埠是pppp.

您可以將電腦 C配置為路由器,它具有到 Internet介面 C的預設路由(它已經這樣做了,通過靜態配置或通過 PPPoE 動態設置等)。這本身就可以完成1.

現在,您有兩種可能:

  1. 使電腦也成為路由器。然後更改電腦 B的配置,使其預設路由通過電腦 A(而不是像以前那樣通過電腦 C),並像這樣配置電腦 A
iptables -t nat -s b.b.b.b -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a

這將使從源 IPb.b.b.b到目標 IPr.r.r.r和目標埠的所有 TCP 數據包pppp假裝它們來自a.a.a.a,從而完成3,來自someserver.com的流量將返回到源地址(a.a.a.a),這將由電腦解碼A並發送回電腦 B。(從而完成4

這更容易,但要求您的電腦 B 正在執行能夠執行此類 NAT 策略的作業系統。 2. 將電腦 A更改為具有私有 IP 10.0.1.100/24,將電腦 B更改為具有私有 IP 10.0.2.100/24。然後在電腦 C上執行:

ip addr add a.a.a.a/nn dev ifaceC
ip addr add b.b.b.b/nn dev ifaceC
iptables -t nat -s 10.0.1.100 -j SNAT --to a.a.a.a
iptables -t nat -s 10.0.2.100 -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a
iptables -t nat -s 10.0.2.100 -j SNAT --to b.b.b.b

nn您的網路遮罩在哪裡,並且ifaceC是您的介面名稱 C。這會將電腦 A電腦 B置於私有範圍內,從而允許電腦 C對****電腦 A進行NAT a.a.a.a(因此它的行為與以前一樣),並且對電腦 B進行NAT a.a.a.a(如果滿足 dst= r.r.r.r, dport=pppp條件)或b.b.b.b(否則)。

這不需要電腦 A電腦 B上的任何特殊支持,但會將它們置於NAT後面,這可能會影響其他一些事情。

當然,在這個時代應該提到的是,上面只適用於好的 ol’ IPv4地址(最後一個地址正在迅速用完),而不適用於IPv6

引用自:https://unix.stackexchange.com/questions/166934