Plnohodnotné testování Ronja-spoje na jednom PC
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
<bash>#!/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
</bash>
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.