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

<bash>#!/bin/sh

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

ETH0=eth0 ETH1=eth1

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

  1. 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

  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

  1. ETH0 - IP 192.168.10.1 through external cable loop
  2. 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.