| @jose_n | it is my great honor to introduce Ismael Briones of InkaTel, located in Espana. he is one of the organizers of infosec. |
|---|---|
| @jose_n | he is a technical information engineer, the webmaster for infosec, and has been working on www.elmundo.es and www.inkatel.com, his own server. |
| @jose_n | and an all around very nice guy. |
| @jose_n | his talk today is "Playing with IPv6 at home (ADSL/CABLE)" |
| @jose_n | you can follow along in his notes at http://www.inkatel.com/new/textos/infosec/2003/ipv6-infosec2003.pdf |
| @jose_n | and now, i'll pass the microphne to ismak |
| @ismak | hello all |
| @ismak | ok, you can download the original document from http://www.inkatel.com/new/textos/infosec/2003/ |
| @ismak | in pdf and html format |
| @ismak | i want to remember you translations in #resdes and questions in #qc |
| @ismak | ok? |
| @ismak | ok, lets go |
| @ismak | In order to allow all the people to "play" with IPv6 i decide to develop an easy introduction of how to use IPv6 at home with our ADSL or CABLE internet connection |
| @ismak | The linux kernel (2.4.x version) support IPv6, and is easy to configure, but we need some special tunnels to use IPv6 with the actual IPv4 model. For this reason we are going to use the http://www.freenet6.netFreenet6 project. |
| @ismak | I - IPv6-ready kernel. Enable IPv6 in the kernel |
| @ismak | We can start checking for IPv6 support in the current running kernel. To check if our running kernel support IPv6 we have to look into /proc/net/ and look if there is a file named if_inet6. If this file doesn't exists the IPv6 module isn't loaded. We can try to load the module with the command modprobe IPv6. If we receive the message modprobe: Can't locate module IPv6, the IPv6 module isn't compiled, so we have to recompile the kernel t |
| @ismak | hans: sorry you have to access to /new/textos/ |
| @ismak | http://www.inkatel.com/new/textos/ |
| @ismak | We can use the native IPv6 kernel iomplemetation of the linux kernel or try the http://www.linux-ipv6.org/USAGI patches (in this document i am going to use the linux kernel implentation, but i recommend you to use the USAGI patches. I wanted to describe the installation of the USAGI patches, but i didn't have got enought time, sorry) You should use kernel series 2.4.x or above (in this example i use 2.4.20), because the IPv6 support in |
| @ismak | and enable the following options: |
| @ismak | Loadable module support ---> |
| @ismak | [*] Enable loadable module support |
| @ismak | [ ] Set version information on all module symbols |
| @ismak | [*] Kernel module loader |
| @ismak | Note: I have to uncheck the second option, because when i tried to insert |
| @ismak | the module i get unresolved Symbol errors. To avoid these errors |
| @ismak | unset the "Set version information on all module symbols" |
| @ismak | i cant have enought time to see what wass the problem, sorry |
| @ismak | Networking options ---> |
| @ismak | <M> The IPv6 protocol (EXPERIMENTAL) |
| @ismak | Note: You can select it as a module or directly compiled inside the kernel |
| @ismak | Save the changes and compile the kernel: |
| @ismak | make dep, make bzImage, make modules, make modules_install |
| @ismak | Install the new kernel, add a line to lilo.conf, install lilo and reboot (all of you know how to make this ;-) ) The next time we reboot we will have an IPv6-ready kernel (if we have compiled IPv6 as module we have to insert this in the kernel: modprobe IPv6). To check if our intefaces have an IPv6 direction associated, we can use the command ifconfig -a (This tool may be able to support IPv6, we will going to see it in the next subsecti |
| @ismak | net-tools and iproute |
| @ismak | The net-tools package includes tools like ifconfig and route, which will help us to configure IPv6 on an interface. First of all, we have to check if the net-tools package we have installed support IPv6. We have to look the output of ifconfig -? or route -? and look for something like inet6 or IPv6: |
| @ismak | /sbin/ifconfig -? 2>& 1|grep -qw 'inet6' && echo "utility 'ifconfig' is IPv6-ready" |
| @ismak | If we don't see the message utility 'ifconfig' is IPv6-ready the net-tools package doesn't support IPv6. We need to upgrade to a more recent version. |
| @ismak | We can see the IPv6 address of our network interfaces: |
| @ismak | eth0 Link encap:Ethernet HWaddr 00:05:1C:06:1D:6A |
| @ismak | ..... |
| @ismak | inet6 addr: fe80::205:1cff:fe06:1d6a/10 Scope:Link |
| @ismak | ..... |
| @ismak | This is first time we use IPv6 and we can see the link local address of our network interface (eth0). These are special addresses and if we use this address as destination the packet would never pass through a router. These addresses are used to communications like: |
| @ismak | * anyone else here on this link |
| @ismak | * looking for special addresses, like routers |
| @ismak | These addresses begin with: |
| @ismak | fe8x |
| @ismak | fe9x |
| @ismak | feax |
| @ismak | febx |
| @ismak | but actually only the first range is in use (fe8x). |
| @ismak | The host part of the address is computed by converting the MAC address of an interface (if available), with the http://standards.ieee.org/regauth/oui/tutorials/EUI64.htmlEUI-64 method, to a unique IPv6 address. If no MAC address is available for this device (virtual devices), something else (the IPv4 address or the MAC address of a physical interface) is used instead. So in our example: |
| @ismak | fe80::205:1cff:fe06:1d6a/10 |
| @ismak | the value: |
| @ismak | 205:1cff:fe06:1d6a |
| @ismak | is the host part and computed from the NIC's MAC address: |
| @ismak | 00:05:1C:06:1D:6A |
| @ismak | Now we only have this IPv6 address in this network interface. When we setup our tunnel with Freenet6, we will have a global address provided by the Freenet6 server (in our case it will be a 6bone test addresses. It will begin with 3ffe prefix). |
| @ismak | -- a little time to the translation |
| @ismak | we can use iproute too, like you can see in the pdf document( i am going to star with the Freenet6 Project) |
| @ismak | we dont have enought time and the iproute chapter isnt too much important |
| @ismak | II - Freenet6 Project |
| @ismak | Now we have to configure our tunnel with Freenet6 to use IPv6 over IPv4 |
| @ismak | In the web page of this project (http://www.freenet6.net) you can read something about the project |
| @ismak | freenet6 provide us with configured tunnels to use |
| @ismak | IPv6 in coexistence with IPv4 by encapsulating IPv6 packets over IPv4 |
| @ismak | If our ISP doesn't provide us with IPv6, we have to use a "third party provider", like Freenet6 that allow to create configured tunnels to use IPv6 over IPv4. |
| @ismak | freenet6 use a model based on a client/server |
| @ismak | a protocol is used to request a single IPv6 address to a full IPv6 prefix from a client to a tunnel server. We can use Freenet6 as an anonymous user or as an authenticated user: |
| @ismak | an anonymous users will not have a static IPv6 assigned to them |
| @ismak | the address will change when we run again the TSP client |
| @ismak | so if we want to have our own single address and a /48 IPv6 prefix everytime we tun the client we have to create our account in the web form http://www.freenet6.net/cgi-bin/new_account.pl |
| @ismak | enter an userid and an email address (to receive the password that Freenet6 will randomly be generated). |
| @ismak | Configuring Freenet6 |
| @ismak | First, we have to download the TSP client from http://www.freenet6.net. Then compile and install it. |
| @ismak | Now we are going to configure the tspc.conf file. |
| @ismak | When we install the tsp client, we have a tspc.conf file. We have to modufy some prameters: |
| @ismak | client_v4=OUR_REAL_IPv4_IP |
| @ismak | Here we have to put the real ip of our ADSL/CABLE internet connection. |
| @ismak | We need to specify the logical interface name that will be used to establish the configured tunnel (IPv6 over IPv4). |
| @ismak | Under any Linux platform including the USAGI stack: |
| @ismak | if_tunnel=sit1 |
| @ismak | Add our userid and password to create the tunnel as authenticated user: |
| @ismak | userid=USERID |
| @ismak | passwd=PASSWORD |
| @ismak | To configure our system and our interface, TSP client will run a configuration script, depending on the OS. By default, when we install the TSP client it detect the system and select this parameter: |
| @ismak | template=linux |
| @ismak | If template is set to checktunnel (template=checktunnel) only displays the values passed to the template. |
| @ismak | The next variables describes parameters to use in order to request /48 or /64 IPv6 prefixes to the server. Before requesting an IPv6 prefix, it is mandatory to have valid userid and password in the server. |
| @ismak | If we want to use our computer as an IPv6 router, we have to informs the template to enable the ipv6_forwarding on your computer: |
| @ismak | host_type=router |
| @ismak | with this command the tscp client will enable the ipv6_forwarding in our computer. |
| @ismak | We can request a /48 or a /64 IPv6 prefixes to the server. The /48 is recommanded for large site with multiple subnets while the /64 is for network with only one subnet. We will select this with the following parameter: |
| @ismak | prefixlen=64 |
| @ismak | or |
| @ismak | prefixlen=48 |
| @ismak | If we want all IPv6 nodes connected on the same subnet will be able to autoconfigure their IPv6 addresses by themselves, we have to enable automatically Router Advertisement on a network interface of the computer. With this option, one /64 of the prefix gotten will be advertised on a network interface. The syntax is: |
| @ismak | if_prefix=eth0 |
| @ismak | NOTE: We have to have the radvd binary installe in our system. (Debian GNU/Linux users: apt-get install radvd) |
| @ismak | And finally the dns_server parameter. This parameter is used to specify the DNS servers that should be used for reverse DNS delagation of the prefix allocated. Only if we have a dns server: |
| @ismak | dns_server=NAME_NAMESERVER1:NAME_NAMESERVER2 |
| @ismak | NOTE: Never use an ip address as a DNS server name. |
| @ismak | we can put one or two nameservers |
| @ismak | its the matter |
| @ismak | You can see more options in the tscp.conf man page.http://www.freenet6.net/tspc.conf.shtmltscp.conf(5) |
| @ismak | I have to modify thing in the template used by the TSP client (in my case the file template/linux.sh): |
| @ismak | Search te text "Default route" and Add the line: |
| @ismak | ExecNoCheck $route -A inet6 del 2000::/3 2>/dev/null # delete old 2000::/3 route |
| @ismak | after the line: |
| @ismak | ExecNoCheck $route -A inet6 del ::/0 2>/dev/null # delete old default route |
| @ismak | If we don't delete the old 2000::/3 route, if we relaunch the TSP client, it will fail when it try to add this route again. |
| @ismak | Other made changes are about Router Advertisement: |
| @ismak | First, create a user to execute radvd. |
| @ismak | (for security reasons, by this way radvd will not be executed as root |
| @ismak | Then update the line: |
| @ismak | Exec $rtadvd -u radvd -C $rtadvdconfigfile |
| @ismak | to |
| @ismak | Exec $rtadvd -u radvd -p /var/run/radvd/radvd.pid -C $rtadvdconfigfile |
| @ismak | We need to create the directory /var/run/radvd/ and chmod this to the user radvd. |
| @ismak | Run tspc |
| @ismak | Once we have installed the client and make the changes to the confige file, we can run tspc: |
| @ismak | PATH_TO_FREENET/bin/tspc -vf PATH_TO_CONF_FILE/tspc.conf |
| @ismak | If nothing happen and all has work well, now we will have a new interface sit1 |
| @ismak | 5: sit1@NONE: <POINTOPOINT,NOARP,UP> mtu 1480 qdisc noqueue |
| @ismak | inet6 fe80::c0a8:d05/10 scope link |
| @ismak | inet6 3ffe:b80:3:9678::2/128 scope global |
| @ismak | inet6 fe80::a00:5/10 scope link |
| @ismak | and we will have our network inteface (Ej: eth0) with our new IPv6 address assigned: |
| @ismak | 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100 |
| @ismak | inet6 fe80::205:1cff:fe06:1d6a/10 scope link |
| @ismak | inet6 3ffe:b80:3:23b:1::1/64 scope global |
| @ismak | We have a 6bone test addresses. Let's try to probe: |
| @ismak | ping6 www.kame.net |
| @ismak | PING www.kame.net(orange.kame.net) 56 data bytes |
| @ismak | 64 bytes from orange.kame.net: icmp_seq=1 ttl=54 time=821 ms |
| @ismak | 64 bytes from orange.kame.net: icmp_seq=2 ttl=54 time=753 ms |
| @ismak | Congratulations!! we are connected to the 6bone ;-) |
| @ismak | You can try to connect to the web page of kame (you have to use an IPv6 compatible web browser, like Mozilla), to see the dancing kame (we will see an animated turtle only if we are connecting with IPv6). |
| @ismak | NOTE: Another example: www.ipv6.elmundo.es here you can find a lot of information about howo configure ipv6 |
| @ismak | Reverse DNS for prefix |
| @ismak | If we have added the option dns_server=fqdn.of.your.dns.server[:other-ns] in out tspc.conf, we can do the following steps to delegate the Reverse DNS to our dns server. |
| @ismak | Reverse DNS allows host to map IP addresses to hostnames. |
| @ismak | To delegate the reverse DNS of our /48 or /64 to our dns server, we have to do the following: |
| @ismak | * Edit our named.conf and add the following line (you have to change the value 1.2.3.4 with you real values) |
| @ismak | zone "4.3.2.1.0.8.b.0.e.f.f.3.ip6.int" { |
| @ismak | type master; |
| @ismak | file "reverse-3ffe-b80-1234.ip6.int"; |
| @ismak | allow-transfer {none;}; |
| @ismak | }; |
| @ismak | # Create the reverse-3ffe-b80-1234.ip6.int file (adjust the values to your real case) and fill it with something like this: |
| @ismak | $TTL 3D |
| @ismak | re, too much info :-) |
| @ismak | flooded :-) |
| @ismak | ok, i continue |
| @ismak | @ IN SOA ipv6.nowhere.net. postmaster.nowhere.net. ( |
| @ismak | 2001110500 ; serial |
| @ismak | 3H ; refresh |
| @ismak | 15M ; retry |
| @ismak | 1W ; expiry |
| @ismak | 1D ) ; mininum |
| @ismak | IN NS ns.nowhere.net. |
| @ismak | $ORIGIN 1.0.0.0.4.3.2.1.0.8.b.0.e.f.f.3.ip6.int. |
| @ismak | 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 in ptr first.ipv6.nowhere.net. |
| @ismak | # Restart bind and check if there is some error in the log file. |
| @ismak | # Try it. Teste the delegation: |
| @ismak | dig 4.3.2.1.0.8.b.0.e.f.f.3.ip6.int NS |
| @ismak | and now test your dns: |
| @ismak | dig 4.3.2.1.0.8.b.0.e.f.f.3.ip6.int SOA |
| @ismak | remember to change 4.3.2.1 with your values |
| @ismak | If it works well, reverse DNS should now be delegated to your server. |
| @ismak | Ok, that's all. Now you can start to play with IPv6, try if your tools are IPv6 compatible and amuse with it. |
| @ismak | yiucan get more info in: |
| @ismak | * http://www.bieringer.de/linux/IPv6/Linux IPv6 HOWTO, Peter Bieringer |
| @ismak | # Linux Kernel Documentation |
| @ismak | * http://www.freenet6.netFreenet6 Project |
| @ismak | usagi web page : http://www.linux-ipv6.org/ |
| @ismak | tjank to all of you, to the traduction man, and the infosec and uninet people |
| @ismak | thanks |