Ключевые слова:netgraph, freebsd, udp, tunnel, (найти похожие документы)
From: Eugene Mychlo <http://forum.bestcom.ru/index.php?showuser=8>
Newsgroups: http://forum.bestcom.ru
Date: Mon, 29 Jan 2006 18:21:07 +0000 (UTC)
Subject: Ethernet через UDP туннель между 2-мя FreeBSD машинами, используя ng_ksocket
Оригинал: http://forum.bestcom.ru/index.php?showtopic=22
Простенький пример UDP-туннеля между 2-мя freebsd-шными машинами.
(Взято из /usr/share/examples/netgraph/udp.tunnel)
1-я машина:
IP: 192.168.0.1
#!/bin/sh
ngctl mkpeer iface hook inet
ngctl mkpeer ng0: ksocket inet inet/dgram/udp
ngctl msg ng0:inet bind inet/192.168.0.1:45600
ngctl msg ng0:inet connect inet/172.16.32.4:45600
ifconfig ng0 10.0.0.1 10.0.0.2
Теперь краткое описание
Вначале создаем интерфейс ng0. К нему крепим udp-сокет 192.168.0.1:45600.
Все пакеты входящие в ng0 упаковываем в udp пакет и отправляем на
адрес 172.16.32.4:45600
Осталось только назначить адрес интерфейсу ng0.
( ng0 - интерфейс точка-точка поэтому указываем адреса двух сторон )
2-я машина:
IP: 172.16.32.4
Здесь все с точностью до наоборот.
#!/bin/sh
ngctl mkpeer iface hook inet
ngctl mkpeer ng0: ksocket inet inet/dgram/udp
ngctl msg ng0:inet bind inet/172.16.32.4:45600
ngctl msg ng0:inet connect inet/192.168.0.1:45600
ifconfig ng0 10.0.0.2 10.0.0.1
Усложним задачу.
Создадим l2-туннель между машинами A и B поверх UDP.
Т.е. будем прозрачно гонять ethernet-фрэймы через этот туннел.
Машина A:
интерфейс em0 - 192.168.0.5/24
интерфейс em1 - без IP-адреса
#!/bin/sh
kldload ng_ether
ngctl mkpeer em1: ksocket lower inet/dgram/udp
ngctl msg em1:lower bind inet/192.168.0.5:2515
ngctl msg em1:lower connect inet/172.16.0.4:2515
ifconfig em1 up
ngctl msg em1: setpromisc 1
ngctl msg em1: setautosrc 0
Машина B:
интерфейс em0 - 172.16.0.4/24
интерфейс em1 - без IP-адреса
#!/bin/sh
kldload ng_ether
ngctl mkpeer em1: ksocket lower inet/dgram/udp
ngctl msg em1:lower bind inet/172.16.0.4:2515
ngctl msg em1:lower connect inet/192.168.0.5:2515
ifconfig em1 up
ngctl msg em1: setpromisc 1
ngctl msg em1: setautosrc 0
Описание:
Грузим ng_ether. ( если его нет в ядре)
Остальное подобно предыдущему примеру, но вместо узла iface используем
ether.
Сокет крепим непосредственно к хуку lower.
Все что приходит с физического уровня запакоывается в IP-UDP пакет и
отправляется к другому концу туннеля.
Входящие UDP пакеты распаковываются и направляются непосредственно на
физический интерфейс.
См. man 4 ng_ether