Linux jako internetová gateway (6)

18. 2. 2004
Doba čtení: 7 minut

Sdílet

V dnešním dílu seriálu o stavbě linuxového routeru se podíváme na složitější síťové vychytávky - ISA PnP tools, Ethtool a IP tunely.

Rozšířená konfigurace sítě

ISA PnP tools

Spoustě ISA síťových karet, a nejen síťových karet, používá se to i u ISA zvukovek, nestačí zadat parametry při zavádění modulu. IRQ se nastavuje softwarově a bez těchto utilit nebo zakompilování ovladače přímo do jádra síťovka prostě neběží. Pokud máte takové karty dvě, jádro detekuje jen jednu a informace o druhé i o první musíte dávat parametry přes lilo. Zprovoznění je jednoduché, nejdříve si kartu necháme nadetekovat, hodí to takovýto výpis, pozor, výpis je zkrácen.

root@thovt:~#pnpdump
# (DEBUG)
(READPORT 0x0273)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING

# Card 1: (serial identifier af 97 9c 95 c9 98 50 6d 50)
# Vendor Id TCM5098, Serial Number 2543621577, checksum 0xAF.
# Version 1.0, Vendor version 1.0
# ANSI string -->3Com 3C509B EtherLink III<--
#
# Logical device id TCM5098
#     Device supports I/O range check register
#     Device supports vendor reserved register @ 0x39
#     Device supports vendor reserved register @ 0x3b
#     Device supports vendor reserved register @ 0x3c
#     Device supports vendor reserved register @ 0x3e
#     Device supports vendor reserved register @ 0x3f
#
(CONFIGURE TCM5098/2543621577 (LD 0
#     Compatible device id PNP80f7
#     IRQ 3, 5, 7, 9, 10, 11, 12 or 15.
#         High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 3 (MODE +E)))
#     Logical device decodes 16 bit IO address lines
#         Minimum IO base address 0x0210
#         Maximum IO base address 0x03e0
#         IO base alignment 16 bytes
#         Number of IO addresses required: 16
# (IO 0 (SIZE 16) (BASE 0x0210) (CHECK))
 (NAME "TCM5098/2543621577[0]{3Com 3C509B EtherLink III}")
# (ACT Y)
))
# End tag... Checksum 0x00 (OK)

# Returns all cards to the "Wait for Key" state
(WAITFORKEY) 

Pokud to kartu našlo, stačí tyto parametry zadat do souboru /etc/isapnp.conf. Ušetříme si práci s přepisováním, když si výpis necháme přesměrovat rovnou do tohoto souboru, a to takhle: pnpdump > /etc/isapnp.conf, jediné, co pak ještě musíme upravit editací, je zrušit # před act, což je logické :-) Tím, že jsme tento soubor vytvořili, se to začne samo spouštět při startu systému, /etc/rc.d/rc.S testuje existenci konfigurace a isapnp spouští. Ještě zavést modul a síťovku nahodit ifconfigem a fungujeme :-)

Ethtool

Ethtool je ulilita na nastavování ethernet karet. Můžete s tím měnit rychlost, duplex a další věci. Ne vše bude fungovat a ne všechny karty to podporují, třeba moje ne2k :-( Ale na druhou stranu tam nic takového není potřeba nastavovat. Prográmek je součástí balíku tcpip, takže ho tam bude mít určitě každý. Zde uvádím příklad výpisu:

root@IOL:~# ethtool eth0
Settings for eth0:
      Supported ports: [ TP BNC ]
      Supported link modes: 10baseT/Half 10baseT/Full
      Supports auto-negotiation: No
      Advertised link modes:  Not reported
      Advertised auto-negotiation: No
      Speed: 10Mb/s
      Duplex: Full
      Port: Twisted Pair
      PHYAD: 0
      Transceiver: internal
      Auto-negotiation: off
      Current message level: 0x00000002 (2)
      Link detected: yes

Vše z výpisu vysvětlovat nebudu, ono to snad ani není potřeba, jen ukážu příklad, jak se změní duplex:

root@IOL:~#ethtool -s eth0 duplex full

Ostatní parametry jako např. rychlost se mění obdobně, pro detaily použijte nápovědu :-)

Tunely GRE a IP

Popis teorie a podrobnosti zde opět vysvětlovat nebudu, na to se podívejte na jiný článek na rootu. Jen popíši, jak takový tunel udělat na našem routeru, a ještě ukážu, jak ho udělat i proti Ciscu. Je to trochu jiný způsob než v článku, nejsou k tomu potřeba iputil2, program iptunnel je také součástí balíku tcpip.

modprobe ip_gre
iptunnel add gre1 mode gre remote 194.228.23.17 local 213.173.12.3 dev eth0
ifconfig gre1 192.168.7.1 netmask 255.255.255.252 up
route add -net 192.168.2.0 netmask 255.255.255.0 gre0 

Toto zadáte na prvním routeru. Zavedete modul pro gre tunel, bez modulu lze použít mode ipip; tímto to vytvoříte jako device, viz cat /proc/net/dev. Ifconfigem přidělíte spojovák a tunel jako takový nahodíte. No a pak si do něj naroutujete tu síť za druhým routerem.

Na druhém routeru nastavíte:

modprobe ip_gre
iptunnel add gre1 mode gre remote 213.173.12.3 local 1.1.1.77 dev eth0
ifconfig gre1 192.168.7.2 netmask 255.255.255.252 up
route add -net 192.168.1.0 netmask 255.255.255.0 gre0 

Jak vidíte, IP jsou otočeny, a je tu ještě jedna věc, druhý router je za překladem 1:1. No a ještě ta samá konfigurace, ale bez toho, že router je za překladem proti cisco routeru.

interface Tunnel0
 ip address 192.168.7.2 255.255.255.252
 tunnel source Serial0
 tunnel destination 213.173.12.3
!
ip route 192.168.1.0 255.255.255.0 Tunnel0

A ještě, vytvořené tunely si na Linuxu vypíšete příkazem iptunnel list, samozřejmě jich můžete mít i více. Při výpisu ifconfigem se to chová jako klasický interface.

PPTP tunel

Pptp tunel se používá u ADSL připojení, ale lze ho použít pro tunel pro vpn. Já ho použil opět proti ciscu. Můžete stáhnout balíček, který podporu pptp nainstaluje. Ohledně ADSL na Linuxu vyšel také článek. I když dnes se už ADSL připojuje přes routery a do vaší sítě je to připojeno klasickým ethernetem. Já tedy ukážu pouze to propojení s ciscem.

Vytvořte soubor /etc/ppp/chap-secrets, vlastník je root a práva jsou 600. V souboru je následující:

#client      server   secret   ip
vondr        cisco    1a4867   194.228.3.7
vondr-dial   *        1b4867   *

Hesla se sdílí i pro dialové připojení, to si ukážeme také. První řádek má jednu zvláštnost, username se dá použít pouze pro spojení s tou jednou definovanou IP adresou a navíc hostname zařízení, na které se budeme připojovat, musí být také shodné, v našem případě cisco. Pokud by tam byly hvězdičky jako v druhém řádku, username se dá použít pro jakýkoliv hostname a IP. Na routeru bude tedy konfigurace:

hostname cisco
user vondr password 1a4867
aaa new-model
!
!
aaa authentication ppp vpn local
vpdn enable
!
vpdn-group vpn
! Default PPTP VPDN group
 accept-dialin
  protocol pptp
  virtual-template 1
!
interface Ethernet0
 ip address 192.168.3.7 255.255.255.0
!
interface Virtual-Template1
 ip address negotiated
 no peer default ip address
 ppp authentication chap vpn
 ppp multilink

Na našem routeru zadejte: pptp 192.168.3.7 user vondr 192.168.254.10:192.168.254.9 & a tím se připojíte, vytvoří se interface ppp1 (tedy v mém případě to je ppp1, protože na ppp0 visí čekání na přímé propojení kabelem přes seriák). Další parametry a případně vysvětlení čerpejte zde.

Ještě ukážu variantu, kdy IP přiděluje router:

interface Virtual-Template1
 ip address 192.168.254.1 255.255.255.0
 peer default ip address pool pptp
 ppp authentication chap vpn
 ppp multilink
!
ip local pool pptp 192.168.254.2 192.168.254.50

Na routeru pak píšete jen: pptp 192.168.3.7 user vondr &.

Tunel při výpadku spojení padá, ale je tu výhoda, že projde i skrz nat, když nemáte veřejnou IP adresu. Tunel schazujeme pidem z /var/run  jako obvykle. Případné přidání rout už ani nepíšu, je to stejné jako u pevného gre tunelu.

Dial

Dial se už probíral na mnoha místech a mnohokrát, jen pro pořádek zde uvedu příklad konfigurace. Hesla bereme z /etc/ppp/chap-secrets, modem máme připojen ke COM2, což je na linuxu ttyS1. Pro snazší práci si můžeme vytvořit link ln -sf /dev/ttyS1 /dev/modem, a pokud budeme chtít zařízení modem, vždy se nám to bude odkazovat na COM2, parametr f u ln přepisuje případné existující linky stejného jména. Vytvořte si soubor chat_script, do kterého zapíšete AT příkazy pro modem a volané číslo, umístění je libovolné, pro příklad bude umístěn v adresáři roota, obsahuje:

" "
"ATX3L0M0"
"OK"
"ATDT971103311"
"CONNECT"

V příkladu je telefonní číslo na IOL a AT příkazy si musíte upravit podle svého modemu. Pozor, toto připojení se týká pouze hw modemů! Softwarové vymyšlenosti, bohužel většina dnes prodávaných, potřebují některé své části emulovat softwarově, link na zprovoznění takových „modemů“ je zde. Pak stačí napsat příkaz:

pppd user vondr-dial /dev/modem 115200 connect "/usr/sbin/chat -f /root/chat_script" & 

Routy a killování je stejné jako před tím, dns se píše do  /etc/resolv.conf.

bitcoin_skoleni

Více adres na ethernetu

Někdy se nám stane, že potřebujeme, aby se naše jediná fyzická karta hlásila k více sítím. Další varianta je, že máme několik uživatelů a nechceme, aby se mezi sebou viděli, vytvoříme tedy několik logických sítí na jedné fyzické kartě a pak v iptables omezíme provoz mezi těmito sítěmi. Toto řešení má ale jednu malou nevýhodu, pokud si nějaký člověk spustí tcpdump nebo podobný program, uvidí veškerou komunikaci, tyto programy totiž poslouchají na druhé vrstvě a my to omezujeme až na třetí, mám na mysli vrstvy OSI modelu. Oddělení na druhé vrstvě zabezpečují VLAN na protokolu 802.1q. Podporu pro více IP adres nazýváme IP aliasingem, v kernelu bare.i je zapnutá a píše se to takto:

ifconfig eth0 192.168.3.1 netmask 255.255.255.0 up
ifconfig eth0:0 192.168.4.2 netmask 255.255.255.252 up
ifconfig eth0:2 192.168.4.10 255.255.255.248 up

Pokud shodíme eth0, spadnou nám logicky i všechny logické porty.

Autor článku

V současné době pracuje jako správce linuxových systémů na Univerzitě Pardubice.