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

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání
 
 
(Nejsou zobrazeny 2 mezilehlé verze od 2 dalších uživatelů.)
Řádek 9: Řádek 9:
  
 
== Skript ==
 
== Skript ==
!/bin/sh
+
 
+
<bash>#!/bin/sh
# a shell script to test two network iterfaces through external
+
 
# cross-cable loop or switch a whatever ;-)
+
# 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
+
# Author: Pavel Kriz
# Thx to: Jezz
+
# http://www.gybon.cz/~pavkriz
# Developed by hkfree.org
+
# Thx to: Jezz
+
# Developed by hkfree.org
ETH0=eth0
+
 
ETH1=eth1
+
ETH0=eth0
+
ETH1=eth1
#######################
+
 
+
#######################
MAC0=`ifconfig $ETH0 | awk "/HWad/ {print \\\$5}"`
+
 
MAC1=`ifconfig $ETH1 | awk "/HWad/ {print \\\$5}"`
+
MAC0=`ifconfig $ETH0 | awk "/HWad/ {print \\\$5}"`
+
MAC1=`ifconfig $ETH1 | awk "/HWad/ {print \\\$5}"`
# ETH0
+
 
ifconfig $ETH0 192.168.0.1
+
# ETH0
echo 0 >/proc/sys/net/ipv4/conf/$ETH0/rp_filter
+
ifconfig $ETH0 192.168.0.1
route add -host 192.168.11.1 dev $ETH0
+
echo 0 >/proc/sys/net/ipv4/conf/$ETH0/rp_filter
arp -s 192.168.11.1 $MAC1 dev $ETH0
+
route add -host 192.168.11.1 dev $ETH0
iptables -t nat -A PREROUTING  -i $ETH0 -j DNAT -d 192.168.10.1 --to 192.168.0.1
+
arp -s 192.168.11.1 $MAC1 dev $ETH0
iptables -t nat -A POSTROUTING -o $ETH0 -j SNAT -s 192.168.0.1  --to 192.168.10.1
+
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
+
# ETH1
echo 0 >/proc/sys/net/ipv4/conf/$ETH1/rp_filter
+
ifconfig $ETH1 192.168.1.1
route add -host 192.168.10.1 dev $ETH1
+
echo 0 >/proc/sys/net/ipv4/conf/$ETH1/rp_filter
arp -s 192.168.10.1 $MAC0 dev $ETH1
+
route add -host 192.168.10.1 dev $ETH1
iptables -t nat -A PREROUTING  -i $ETH1 -j DNAT -d 192.168.11.1 --to 192.168.1.1
+
arp -s 192.168.10.1 $MAC0 dev $ETH1
iptables -t nat -A POSTROUTING -o $ETH1 -j SNAT -s 192.168.1.1  --to 192.168.11.1
+
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
+
# ETH0 - IP 192.168.10.1 through external cable loop
 +
# ETH1 - IP 192.168.11.1 through external cable loop
 +
</bash>
  
 
== Známé chyby ==
 
== Známé chyby ==

Aktuální verze z 17. 1. 2009, 18:42

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.