雙網卡的迴環測試(轉載)

版權聲明:本文爲CSDN博主「hulifox007」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hulifox007/article/details/5915514

最近碰到這樣一個問題,一臺linux機器上裝有兩個網卡,分別爲eth0和eth1,將這兩個網卡用網線直接連接起來,要進行迴環測試,也就是從eth1發數據從eth0收到,從eth0發數據從eth1收到。

本來,通過原始套接字,直接綁定到指定的網卡上進行接收和發送數據,是很容易完成任務。但要求是要用基於IP的協議,TCP或UDP完成測試。Linux的內核對從一個網絡地址發往另一個網絡地址的數據包,如果這兩個網絡地址同屬一個host,則這個數據包會直接在內部轉發,根本不會放到網絡設備上。後來經過一番實驗,弄出了下面的腳本:

#!/bin/bash

ETH0_MAC=00:11:22:33:44:55
ETH1_MAC=00:11:22:33:44:66

ifconfig eth0 hw ether $ETH0_MAC
ifconfig eth1 hw ether $ETH1_MAC

ifconfig eth0 192.168.1.1 netmask 255.255.255.0
ifconfig eth1 192.168.1.2 netmask 255.255.255.0

#ip route flush table all
route add 192.168.1.11 dev eth0
route add 192.168.1.22 dev eth1

arp -i eth0 -s 192.168.1.11 $ETH1_MAC
arp -i eth1 -s 192.168.1.22 $ETH0_MAC

iptables -t nat -F

iptables -t nat -A POSTROUTING -s 192.168.1.1 -d 192.168.1.11 -j SNAT --to-source 192.168.1.22
iptables -t nat -A PREROUTING -s 192.168.1.22 -d 192.168.1.11 -j DNAT --to-destination 192.168.1.2

iptables -t nat -A POSTROUTING -s 192.168.1.2 -d 192.168.1.22 -j SNAT --to-source 192.168.1.11
iptables -t nat -A PREROUTING -s 192.168.1.11 -d 192.168.1.22 -j DNAT --to-destination 192.168.1.1

爲了簡單起見,腳本弄了兩個臨時的MAC地址,分別設定在eth0和eth1上,然後分別爲其設定IP地址爲192.168.1.1和192.168.1.2。

然後是路由表的設置,設置了兩個到目的地址的路由,目的地址分別是192.168.1.11和192.168.1.22。這兩個地址其實是沒有主機與其對應的。

然後設置了兩條靜態ARP表項,這樣發往這兩個IP地址的數據包就不會再有ARP請求。注意192.168.1.11會解析到eth1的MAC地址, 192.168.1.22會解析到eth0的MAC地址。

最後是設置iptable SNAT和DNAT,這是關鍵所在:

將從192.168.1.1出去的包的源地址改爲192.168.1.22

將收到的目的地址爲192.168.1.22的包的目的地址改爲192.168.1.2

將從192.168.1.2出去的包的源地址改爲192.168.1.11

將收到的目的地址爲192.168.1.11的包的目的地址改爲192.168.1.1

在執行了上面的腳本後,可以綁定在192.168.1.1上向192.168.1.11發數據,該數據包就會經過網線被eth1收到, 反之亦然,可以綁定在192.168.1.2上向192.168.1.22發數據,如:

ping -I 192.168.1.1 192.168.1.11

ping -I 192.168.1.2 192.168.1.22

如果用udp或tcp測試,則要用bind()將套接字綁定在對應的地址上。

在192.168.1.1看來,另一個網卡的地址是192.168.1.11, 而在192.168.1.2看來,另一個網卡的地址是192.168.1.22。用iptables在中間做了轉換。
————————————————
版權聲明:本文爲CSDN博主「hulifox007」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hulifox007/article/details/5915514

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章