# [solved] router howto

## Qubax

hab jetzt schnell den google benutzt, um daraufzukommen wie ich mir einen router bastle -> immer viele seiten, steht wie man sich einwählt ..., aber nicht der befehl, der mich zum router macht. ich denke, das müßte doch nur eine zeile sein.

kann mich mit modem ins internet wählen und will dann einfach (obs das auch wird sehen wir ja) dem netzwerk (192.168.100.x) zugang über mein modem (auf ttys1) verschaffen. bitte schreit mir einer den einzeiler (oder eine kurze anleitung)

donkschian olle mitanontLast edited by Qubax on Mon May 12, 2003 8:22 pm; edited 1 time in total

----------

## Qubax

ps so das sie dann nur noch meine ip als gateway angeben brauchen

----------

## de4d

zum router machst du deine box mit

```

echo 1 > /proc/net/ipv4/ip_forward

```

masquerading (ich gemal davon aus dass du das meinst) geht am einfachsten mit

```

/path/to/iptables -t nat -A POSTROUTING -o ppp0(whatever) -j MASQUERADE

```

solltest iptables installiert und kernel support v modul habn

viel erfolg....

----------

## Qubax

ok, dumme frage, aber wo ist im kernel ipv4 zu finden?

natürlich in network options (verwende menuconfig) aber wo dann ?

oder soll ich ipv6 (experimental) versuchen?

----------

## käychkö

du kanst dich ja mal hier http://www.e-infomax.com/ipmasq/ umschauen... die seite hat ein Paar howtos zu masq aber wo du jetzt das ganze einstellen must weis ich leider net....

----------

## KiLLaCaT

ich dachte das IPv4 is normalerweise im kernel aktiviert.(wie kommst du denn sonst ins netz?)

jax

----------

## Qubax

kann mir einer erklären für was die zeile mit 

```
echo 1 > /proc/net/ipv4/ip_forward
```

 gut ist, den die gibt es bei mir nicht (vergleichabr mit /proc/sys/net/ip_forward?), und was läuft dann da eigentlich

ich will eigentlich nur für 192.168.100.x als router da sein, kann man das mit --source address/mask so weit einschränken? nach man kann man so (wenn ich das richtig verstanden habe) nur enine einzelne ip so angeben. muß ich zusätzlich auch noch --in-interface angeben eth0 angeben, oder weis er das sowieso von irgendwo?

was ist jetzt richitg(er)?

```
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
```

 oder 

```
iptables -t nat -A POSTROUTING -o ppp0 -i eth0 -s 192.168.100.0/24 -j MASQUERADE
```

wobei ich hoffe das er mir mit 192.168.100.0 alle ip's mit 192.168.100 nimmt[/code]

----------

## de4d

alles was ueber

```
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
```

rausgeht, schraenkt die sache nur ein (afaik)

darueber kannst du nachdenken wenn das erstmal steht

im zweifel man iptables

 *man iptables wrote:*   

> 
> 
>  -o, --out-interface [!] [name]
> 
> Optional name of an interface via which a packet is going to be sent (for  packets  entering  the FORWARD,  OUTPUT  and  POSTROUTING  chains).   When the "!" argument is used before the interface name, the sense is inverted.  If the interface name ends in  a  "+",  then  any  interface  which begins  with  this  name will match.  If this option is omitted, the string "+" is assumed, which will match with any interface name.
> ...

 

zu deutsch:

policy betrifft alle pakete die aus (in dem fall) ppp0 gejagt werden (eg0l woher sie kommen)

----------

## trapni

```

#! /bin/sh

# file: simplerouter.sh

# description: a very simple router for dialup connection server

OFACE=ppp0 # dein interface zum Internet (meist ppp0, oder ippp0)

enable_routing() {

  sysctl -w net.ipv4.ip_forward=1

  sysctl -w net.ipv4.ip_dynaddr=1

  iptables -t nat -A POSTROUTING -o $OFACE -j MASQUERADE

}

disable_routing() {

  sysctl -w net.ipv4.ip_forward=0

  # net.ipv4.ip_dynaddr muss nicht unbedingt zurueck gesetzt werden

  iptables -t nat -D POSTROUTING -o $OFACE -j MASQUERADE 2>&1 > /dev/null

}

case "$1" in

  start) enable_routing ;;

  stop) disable_routing ;;

  *) echo "usage: $0 start|stop" ;;

esac

```

So: in einer Ausgangs Queue wie POSTROUTING bzw OUTPUT darf man nicht nach der Herkunft (Quelle) von IP Paketen fragen. Probiers doch mal aus, du wirst eine Fehlermeldung bekommen.

Zweitens: Du kannst IPv4 aktivieren (ist es aber per default) wenn du den Punkt TCP/IP Networking einschaltest. Ohne diesem geht auch kein IPv6. Ist im Kernel von IP die rede, meinen sie IPv4, andernfalls schreiben sie schon IPv6 hin.

3.) Die Frage, wozu /proc/sys/net/ipv4/ip_forward (bzw den sysctl Key net.ipv4.ip_forward) da ist, ist einfach zu erklaeren. Ein Router ist dazu da, Pakete aus einem Netzwerk ins naechste zu transportieren, standard maessig darf das der Linux rechner nicht, um aber diesen Transport Kernelseitig zu erlauben MUSS net.ipv4.ip_forward aktiviert worden sein.

"sysctl -w net.ipv4.ip_forward" erzielt das gleiche wie "echo 1 > /proc/sys/net/ipv4/ip_forward".

4.) solltest du eine Source Address Abfrage bei iptables auf 192.168.100/24 machen, nimmer er alle aus dem gegebenen Subnetz. 192.168.100.0 ist eine Gueltige Addresse, aber darf von keinem Host verwendet werden, sie ist (hier) ausschliesslich eine Netzwerkaddresse, um nun den Umfang deines Netzwerkes anzugeben, haengst du einfach eine Bitmaske (/24) hinten an. und damit hast du alle Addressen von .0 bis .255.

p.s.: ip_dynaddr sollte mit eingeschalten werden, da es sich bei dir bestimmt um eine dynamische IP handelt, und damit der Kernel besser die Pakete handeln kann die er zu maskieren hat (Masquerading).

MfG,

Christian Parpart.

----------

## Qubax

tschuldigung für die späte antwort, aber auf alle fälle möchte ich mich für die hilfe von euch bedanken

zusätzliche frage: wenn jetzt ppp0 mit demand läuft, sprich automatisch hinauswählt wenn ich ins internet will, funktioniert alles. was brauch ich zusätzlich, damit er hinauswählt, falls ein client ins internet will, die verbindung aber noch nicht steht? kurz, er auf demand von client hinauswählt. ich denke FORWARD, bin mir aber nicht ganz sicher.

(wollte nicht neues thema eröffnen, da es meiner meinung nach hier dazupaßt)

----------

## CyBerian

Hallöchen,

ich habe das script von trapni mal ein klein wenig verändert, damit man auch sieht was eigentlich gerade passiert: 

Wenn jemand daran interesse hat bitte  :Smile: 

```

#! /bin/bash

# file: simplerouter.sh

# description: a very simple router for dialup connection server

OFACE=ppp0 # dein interface zum Internet (meist ppp0, oder ippp0)

NETIP=10.0.1.0/24 #Adressbereich für den der Zugang erlaubt ist

enable_routing()

{

  echo "Setze Kernel Parameter:"

  echo -n "  --> "

  sysctl -w net.ipv4.ip_forward=1

  echo -n "  --> "

  sysctl -w net.ipv4.ip_dynaddr=1

  echo "aktiviere MASQUERADING:"

  echo -n "  --> "

  iptables -t nat -A POSTROUTING -o $OFACE -s $NETIP -j MASQUERADE

  if [ $? -eq 0 ] ; then

    echo "MASQUERADING aktiviert"

  fi

}

disable_routing()

{

  echo "Setze Kernel Parameter:"

  echo -n "  --> "

  sysctl -w net.ipv4.ip_forward=0

  # net.ipv4.ip_dynaddr muss nicht unbedingt zurueck gesetzt werden

  echo -n "  --> "

  sysctl -w net.ipv4.ip_dynaddr=0

  echo "deaktiviere MASQUERADING:"

  echo -n "  --> "

  iptables -t nat -D POSTROUTING -o $OFACE -s $NETIP -j MASQUERADE 2>&1 > /dev/null

  if [ $? -eq 0 ] ; then

    echo "MASQUERADING deaktiviert"

  fi

}

case "$1" in

  start) enable_routing ;;

  stop) disable_routing ;;

  *) echo "Very Simple Router for Dialup Connection Server"

     echo "usage: $0 start|stop" ;;

esac

```

----------

## KiLLaCaT

hi

falls du sonst noch fragen hast, gibts ein ebook.

und zwar hier:

http://www.64-bit.de/dokumentationen/netzwerk/a/009/inhalt.htm

das hat mir sehr geholfen.

MfG

jax

----------

## trapni

 *CyBerian wrote:*   

> Hallöchen,
> 
> ich habe das script von trapni mal ein klein wenig verändert, damit man auch sieht was eigentlich gerade passiert: 
> 
> Wenn jemand daran interesse hat bitte :)

 *smile* .oO(ich hab mir wohl nicht viel aus schoenheit gemacht) Fuer mich zaehlte da eh' nur Funktionalitaet, es soll ja auf'm Server (Router) laufen :o)

Cya all,

Christian Parpart (trapni)

----------

## CyBerian

hehe   :Cool: 

Jetzt kommt der absolute Overkill  :Smile: 

Na gut ich weiß ich habe zuviel Zeit aber hier nochmal das ganze mit farben im "Gentoo" Style: 

```

#!/bin/bash

# file: simplerouter.sh

# description: a very simple router for dialup connection server

# created by CyBerian 08/11/2002

OFACE=ppp0 # dein interface zum Internet (meist ppp0, oder ippp0)

NETIP=10.0.1.0/24 #Adressbereich für den der Zugang erlaubt ist

xecho() #(text, x, y, fgColor, bold)

{

#set position if given

  if [ $2 -ne -1 ] ; then

     if [ $3 -ne -1 ] ; then

        tput cup $3 $2

     fi

  fi

#set color if valid color is given

  if [ "`echo $4|cut -c-6`" = "bright" ] ; then

     color=`echo $4|cut -c7-`

     pre_color_code="\033[01;3"

  else

     pre_color_code="\033[00;3"

     color=$4

  fi

  case "$color" in

    black) colorcode="${pre_color_code}0m";;

    red) colorcode="${pre_color_code}1m";;

    green) colorcode="${pre_color_code}2m";;

    yellow) colorcode="${pre_color_code}3m";;

    blue) colorcode="${pre_color_code}4m";;

    lila) colorcode="${pre_color_code}5m";;

    cyan) colorcode="${pre_color_code}6m";;

    grey) colorcode="${pre_color_code}7m";;

    *) colorcode="";;

  esac

#print out the given string

  printf "${colorcode}$1\033[00;00m"

#return and restore variables

  return

}

statusexec() #(Msg, Exec, Result)

{

  MsgLen=`echo -n $1|wc -c`

  ScreenCols=`tput cols`

  StatusLen=6

  xecho " * " -1 -1 "brightgreen"

  echo -n "$1"

  execresult="`$2 2>&1`"

  execreturn=$?

  spacelen=`expr $ScreenCols \- \( 3 \+ $MsgLen \) \- \( $StatusLen \+ 1 \)`

  printf "%${spacelen}s" ""

  if [ $execreturn -ne $3 ] ; then

     xecho "[ " -1 -1 "brightblue"

     xecho "!!" -1 -1 "brightred"

     xecho " ]\n" -1 -1 "brightblue"

     echo $execresult

  else

     xecho "[ " -1 -1 "brightblue"

     xecho "OK" -1 -1 "brightgreen"

     xecho " ]\n" -1 -1 "brightblue"

  fi 

}

enable_routing() 

{

  statusexec "Setze net.ipv4.ip_forward=1" "sysctl -w net.ipv4.ip_forward=1" 0

  statusexec "Setze net.ipv4.ip_dynaddr=1" "sysctl -w net.ipv4.ip_dynaddr=1" 0

  statusexec "Erstelle DROP IpTables Rule (NAT-->ppp0)" "iptables -t nat -A PREROUTING -i $OFACE -j DROP" 0

  statusexec "Erstelle MASQUERADING IpTables Rule" "iptables -t nat -A POSTROUTING -o $OFACE -s $NETIP -j MASQUERADE" 0

}

disable_routing() 

{

  statusexec "Setze net.ipv4.ip_forward=0" "sysctl -w net.ipv4.ip_forward=0" 0

  statusexec "Setze net.ipv4.ip_dynaddr=0" "sysctl -w net.ipv4.ip_dynaddr=0" 0

  statusexec "Lösche DROP IpTables Rule (NAT-->ppp0)" "iptables -t nat -D PREROUTING -i $OFACE -j DROP" 0

  statusexec "Lösche MASQUERADING IpTables Rule" "iptables -t nat -D POSTROUTING -o $OFACE -s $NETIP -j MASQUERADE" 0

}

echo "Very Simple Router for Dialup Connection Server"

case "$1" in

  start) enable_routing ;;

  stop) disable_routing ;;

  *) echo -n "usage: "

     xecho "$0 " -1 -1 "brightyellow"

     xecho "start" -1 -1 "brightgreen"

     echo -n "|"

     xecho "stop\n" -1 -1 "brightred";;

esac 

```

Ich weiß ich bin ein Spielkind, aber wie gesagt ich hatte gerade nichts zu tun  :Smile:  vielleicht kanns ja der eine oder andere brauchen...

----------

## freshy98

Hi!

My German is very, very poor so could someone please translate this for me into English?

I want to set up a PC using Gentoo for use as a router/firewall and stuff.

I searched the forums here for router and stuff but this one was the only real one I could use I think.

Thanks in advance!

----------

## doll1

@CyBerian

Danke, Mann   :Cool: 

----------

## azote

I dont know german .. but I think we just need to use the last script?

is that right?

----------

## KiLLaCaT

 *azote wrote:*   

> I dont know german .. but I think we just need to use the last script?
> 
> is that right?

 correct!

----------

