Plnohodnotné testování­ Ronja-spoje na jednom PC

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání

Idea

Následující skript umožňuje otestování obecně jakéhokoliv ethernetovského propojení dvou síťových karet v tomtéž PC (rovněž může sloužit i pro vlastní otestování této dvojice karet) na Linuxu.

Jelikož oficiální postup testování Ronja-spoje na koberci neobsahuje (neobsahoval) plnohodnotný test (tj. možnost otestovat FTP přenosem a podobně) pro jedno PC s dvěma kartami, rozhodl jsem se vytvořit tento skript.

Skript používá interfacy eth0 a eth1 a umožňuje např. pingnout na eth1 tak aby packet prošel kabelem (nebo čímkoliv dalším co karty propojuje) z eth0 a odpověč rovněž kabelem zase opačným směrem.

Pokud by se nepoužil tento skript, jádro by neodeslalo packet kabelem ale použilo by loopback, pokud se loopback zakáže, odpověč nepřijde vůbec.

Skript

#!/bin/sh

# a shell script to test two network iterfaces through external
# cross-cable loop or switch a whatever ;-)
#
# Author: Pavel Kriz
# http://www.gybon.cz/~pavkriz
# Thx to: Jezz
# Developed by hkfree.org

ETH0=eth0
ETH1=eth1

#######################

MAC0=`ifconfig $ETH0 | awk "/HWad/ {print \\\$5}"`
MAC1=`ifconfig $ETH1 | awk "/HWad/ {print \\\$5}"`

# ETH0
ifconfig $ETH0 192.168.0.1
echo 0 >/proc/sys/net/ipv4/conf/$ETH0/rp_filter
route add -host 192.168.11.1 dev $ETH0
arp -s 192.168.11.1 $MAC1 dev $ETH0
iptables -t nat -A PREROUTING  -i $ETH0 -j DNAT -d 192.168.10.1 --to 192.168.0.1
iptables -t nat -A POSTROUTING -o $ETH0 -j SNAT -s 192.168.0.1  --to 192.168.10.1

# ETH1
ifconfig $ETH1 192.168.1.1
echo 0 >/proc/sys/net/ipv4/conf/$ETH1/rp_filter
route add -host 192.168.10.1 dev $ETH1
arp -s 192.168.10.1 $MAC0 dev $ETH1
iptables -t nat -A PREROUTING  -i $ETH1 -j DNAT -d 192.168.11.1 --to 192.168.1.1
iptables -t nat -A POSTROUTING -o $ETH1 -j SNAT -s 192.168.1.1  --to 192.168.11.1

# ETH0 - IP 192.168.10.1 through external cable loop
# ETH1 - IP 192.168.11.1 through external cable loop

Známé chyby

Existuje vícero verzí ifconfigu s různým formátem výstupu. Řádky s awk mají za úkol vyparsovat z výstupu ifconfigu MAC adresu síťové karty, pokud skript selže je možné, že formát ifconfigu je jiný než jaký skript předpokládá. Pohrajte si s číslem parametru (zde $5).

Je možné že skript lze vylepšit, zjednodušit, klidně tvořte (tohle je vlastně první verze co mi fungovala).

Další možnost je místo skriptu použít jaderný modul (není standardně v Linuxu), který pozmění použití loopbacku. Nicméně pro tento účel je to zbytečně težký kalibr.