具有自定義邏輯的橋接器/路由器
我有一個帶有 3 個網路適配器的 Linux 機器,我想配置如下:
- 適配器 A 連接到電腦 A
- 適配器 B 連接到電腦 B
- 適配器 C 已連接到 Internet。具體來說,到 someserver.com
我想要達到的目標:
- 來自 A 的所有流量都將流向 Internet
- 在適配器 B 上定義一個特殊的“秘密埠”
- 從電腦 B 到“秘密埠”上的“someserver.com”的 TCP 流量將偽裝其源 IP,使其看起來像來自電腦 A
- 從“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.
現在,您有兩種可能:
- 使電腦也成為路由器。然後更改電腦 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
這將使從源 IP
b.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更改為具有私有 IP10.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進行NATa.a.a.a
(因此它的行為與以前一樣),並且對電腦 B進行NATa.a.a.a
(如果滿足 dst=r.r.r.r
, dport=pppp
條件)或b.b.b.b
(否則)。這不需要電腦 A或電腦 B上的任何特殊支持,但會將它們置於NAT後面,這可能會影響其他一些事情。