A portable dhcpv6 relay
dibbler-relay is a portable implementation of the DHCPv6 relay. DHCPv6 relays are proxies, which allow one server to support links, which server is not directly connected to. There are ports available for Linux 2.4/2.6 systems as well as MS Windows XP and 2003. They are freely available under GNU GPL version 2 (or later) license.
dibbler-relay [ run | start | stop | status ]
run - starts relay in the console. Relay can be closed using ctrl-c.
start - starts relay in daemon mode.
stop - stops running relay.
status - shows status of the relay.
Relay forwards DHCPv6 messages between interfaces. Messages from client are encapsulated and forwarded as RELAY_FORW messages. Replies from server are received as RELAY_REPL message. After decapsulation, they are being sent back to clients.
It is vital to inform server, where this relayed message was received. DHCPv6 does this using interface-id option. This identifier must be unique. Otherwise relays will get confused when they will receive reply from server. Note that this id does not need to be alligned with system interface id (ifindex). Think about it as "ethernet segment identifier" if you are using Ethernet network or as "bss identifier" if you are using 802.11 network.
Let's assume this case: relay has 2 interfaces: eth0 and eth1. Clients are located on the eth1 network. Relay should receive data on that interface using well-known ALL_DHCP_RELAYS_AND_SERVER multicast address (ff02::1:2). Relay also listens on its global address 2000::123. Packets received on the eth1 should be forwarded on the eth0 interface, also using multicast address:
log-level 8 log-mode short iface eth0 { server multicast yes } iface eth1 { client multicast yes client unicast 2000::123 interface-id 1000 }
Here is another exmaple. This time messages should be forwarded from eth1 and eth3 to the eth0 interface (using multicast) and to the eth2 interface (using server's global address 2000::546). Also clients must use multicasts (the default approach):
iface eth0 { server multicast yes } iface eth2 { server unicast 2000::456 } iface eth1 { client multicast yes interface-id 1000 } iface eth3 { client multicast yes interface-id 1001 }
All files are created in the /var/lib/dibbler directory. During operation, Dibbler saves various file in that directory. Dibbler relay reads /etc/dibbler/relay.conf file. Log file is named client.log.
This implementation aims at conformance to the following standards:
RFC 3315 DHCP for IPv6
RFC 3736 Stateless DHCPv6
Bugs are tracked with bugzilla, available at http://klub.com.pl/bugzilla/. If you belive you have found a bug, don't hesitate to report it.
Dibbler was developed as master thesis on the Technical University of Gdansk by Tomasz Mrugalski and Marek Senderski. Currently Marek has not enough free time, so this project is being developed by Tomasz Mrugalski. Author can be reached at [email protected].
There are dibbler-server(8) and dibbler-client(8) manual pages available. You are also advised to take a look at project website located at http://klub.com.pl/dhcpv6/. As far as authors know, this is the only Windows DHCPv6 stateful implementation available and the only one with relay support. It is also one of two freely available under Linux. The other Linux implementation is available at http://dhcpv6.sourceforge.net, but it is rather outdated and seems not being actively developed.