linux arp代理,DMZ與NAT
Linux系統預設並沒有開啟IP轉發功能,要確認IP轉發功能的狀態,可以檢視/proc檔案系統,使用下面命令:
cat /proc/sys/net/ipv4/ip_forward
如果上述檔案中的值為0,說明禁止進行IP轉發;如果是1,則說明IP轉發功能已經開啟。
要想開啟IP轉發功能,可以直接修改上述檔案:
echo 1 > /proc/sys/net/ipv4/ip_forward
把檔案的內容由0修改為1。禁用IP轉發則把1改為0。
上面的命令並沒有儲存對IP轉發配置的更改,下次系統啟動時仍會使用原來的值,要想永久修改IP轉發,需要修改/etc/sysctl.conf檔案,修改下面一行的值:
net.ipv4.ip_forward = 1
修改後可以重啟系統來使修改生效,也可以執行下面的命令來使修改生效:
sysctl -p /etc/sysctl.conf
進行了上面的配置後,IP轉發功能就永久使能了
有時候我們會在一個已有網路(10.10.10.0/24)內組建一個實驗網路(192.168.1.0/24),網路結構如上圖所示。
假設我們不能控制(修改)A網路內除D主機以外的系統配置,但可以完全控制網路B內的主機。
此時Server D實際上要承擔一個路由的角色(它有兩張網絡卡分別在兩個網路A,B內)
所以先開啟其上的核心路由轉發功能,修改/etc/sysctl.conf中的如下配置
net.ipv4.ip_forward
= 1 |
儲存後應用檢視
1 2 |
#
sysctl -p
net.ipv4.ip_forward
= 1
|
另外需要保證Server D上的路由表配置正確,這裡我們假設D上10.10.10.103所在的介面為eth0, 而192.168.1.1所在的介面為eth1
最後將網路B內的主機的預設閘道器都設定為Server D的192.168.1.1地址,到此準備工作已經完成。下面可以採用不同的方法來使得網路B和網路A中的主機實現不同程度的互聯。
SNAT
如果想讓B網路內的所有主機單向訪問A網路內的資源可以在Server D上做一個NAT(SNAT):
iptables
-t nat -A POSTROUTING
|
這種方法就是最常用的NAT,內部網路B中的主機可以主動發起請求訪問的外網A中的資源,實現內外網主機通訊,但是外網A內的主機無法主動與內網主機建立連線。內網B中的主機沒有A網內的獨立IP。
如果只想讓某臺B網中的主機訪問A網,則可以限定來源IP,具體可以參考iptables手冊:
iptables
-t nat -A POSTROUTING -s 192.168.100.100 -o eth0 -j MASQUERADE
|
SNAT + DNAT + ARP代理 = 浮動IP
如果我們想為網路B內的Server E分配一個IP如10.10.10.104(A網路的地址),使得網路A內的主機可以直接訪問主機E
此時我們可以在Server D上先做一個SNAT:
iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.1.100(E在B網內的地址) -j SNAT --to-source 10.10.10.104
|
這樣網路A網路收到Server E發出的包時,看到的IP就是10.10.10.104,其響應也會回發給這個地址
然後我們在Server D(閘道器)上做一個DNAT:
iptables
-t nat -A PREROUTING -i eth0 -d 10.10.10.104 -j DNAT --to-destination 192.168.1.100
|
這樣Server D收到目的IP為10.10.10.104的包時就會修改目的IP為網路B內的Server E的IP(192.168.1.100),自然的按照Server D上的路由規則這個包會從介面eth1出去,經過交換機B,到達Server E。
現在還存在一個問題,我們不能修改網路A內的主機配置,怎麼做才能讓IP為10.10.10.104的包發到Server D來(因為主機D自己的IP是10.10.10.103)。如果我們自Server D上再插入一張網絡卡,讓後將其地址設為10.10.10.104就可以,不過我們沒有必要這麼做。我們在主機D的eth0介面上加入一個次級地址即可
ip
addr add 10.10.10.104/24 dev eth0
|
這樣網路A內的主機在使用ARP協議查詢10.10.10.104所對應的MAC地址時,Server D就能做出響應,傳送一個虛擬的MAC地址,於是發往10.10.10.104的包就會到達主機D,在進行上述的DNAT步驟,兩邊就可以互通了。
服務埠對映 SNAT + DNAT
浮動IP的方案需要佔用一個網路A的IP,且會完全暴露主機E,有時可以通過埠映射向外部網路A暴露網路B內的服務,如將Server D上的2222埠與Server E上的22埠建立對映,這樣網路A內的主機訪問10.10.10.103:2222實際就是訪問網路B內的主機192.168.100:22。