雙網口回環測試

2021-09-26 03:53:18 字數 2073 閱讀 6111

最近碰到這樣乙個問題,一台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 雙網口配置

方法一 內網ip為 192.168.4.213,內網閘道器 192.168.4.1 外網ip為 58.200.200.15 子網掩碼為 255.255.255.128 閘道器為 58.200.200.1 1 當配置伺服器為外網ip和內網ip的方式時,只設定外網ip的閘道器,不要設定內網ip的閘道器 ...

雙網口實現網口2做WAN口

裝置使用的是中嵌科技的閘道器裝置,現在有兩個網口,其中網口1用於和我的電腦建立ssh通訊,網口2準備接路由器上網。先看看系統版本 root ec2022v cat proc version linux version 3.6.9 rt21 emfuture root imx gcc version ...

ARM Linux系統使用雙網口的設定方法

使用雙網口有兩種情況,以下以myd am335x為例,說明如何同時使用開發板的兩個網口。第一種 不同網段 如果兩個網口配置成不同網段,那就很簡單,分別把兩個網口配置成對應的ip位址,比如eth0連線到路由器上 閘道器192.168.1.1 eth1連線到本地電腦上 閘道器169.254.1.1 那麼...