雙網絡卡的回環測試

2021-06-19 18:43:19 字數 2073 閱讀 4785

最近碰到這樣乙個問題,一台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在中間做了轉換。

雙網絡卡的回環測試

最近碰到這樣乙個問題,一台linux機器上裝有兩個網絡卡,分別為eth0和eth1,將這兩個網絡卡用網線直接連線起來,要進行回環測試,也就是從eth1發資料從eth0收到,從eth0發資料從eth1收到。本來,通過原始套接字,直接繫結到指定的網絡卡上進行接收和傳送資料,是很容易完成任務。但要求是要用...

雙網絡卡的回環測試

最近碰到這樣乙個問題,一台linux機器上裝有兩個網絡卡,分別為eth0和eth1,將這兩個網絡卡用網線直接連線起來,要進行回環測試,也就是從eth1發資料從eth0收到,從eth0發資料從eth1收到。本來,通過原始套接字,直接繫結到指定的網絡卡上進行接收和傳送資料,是很容易完成任務。但要求是要用...

雙網絡卡的意外

給公司的內部測試伺服器再裝上乙個8139網絡卡。伺服器斷網了。ping 外網不同,ping 內網也不同。鬱悶了,奇怪了。以前沒遇到過這樣的問題呀。先看一下伺服器路由表 route n root beihai365 route n kernel ip routing table destination...