mirror of https://github.com/tLDP/LDP
29462 lines
547 KiB
Plaintext
29462 lines
547 KiB
Plaintext
#LyX 2.0 created this file. For more info see http://www.lyx.org/
|
|
\lyxformat 413
|
|
\begin_document
|
|
\begin_header
|
|
\textclass docbook-book
|
|
\begin_preamble
|
|
|
|
\end_preamble
|
|
\use_default_options false
|
|
\maintain_unincluded_children false
|
|
\language english
|
|
\language_package default
|
|
\inputencoding default
|
|
\fontencoding global
|
|
\font_roman default
|
|
\font_sans default
|
|
\font_typewriter default
|
|
\font_default_family default
|
|
\use_non_tex_fonts false
|
|
\font_sc false
|
|
\font_osf false
|
|
\font_sf_scale 100
|
|
\font_tt_scale 100
|
|
|
|
\graphics default
|
|
\default_output_format default
|
|
\output_sync 0
|
|
\bibtex_command default
|
|
\index_command default
|
|
\paperfontsize default
|
|
\spacing single
|
|
\use_hyperref false
|
|
\papersize default
|
|
\use_geometry false
|
|
\use_amsmath 1
|
|
\use_esint 0
|
|
\use_mhchem 1
|
|
\use_mathdots 1
|
|
\cite_engine basic
|
|
\use_bibtopic false
|
|
\use_indices false
|
|
\paperorientation portrait
|
|
\suppress_date false
|
|
\use_refstyle 0
|
|
\index Index
|
|
\shortcut idx
|
|
\color #008000
|
|
\end_index
|
|
\secnumdepth 3
|
|
\tocdepth 3
|
|
\paragraph_separation indent
|
|
\paragraph_indentation default
|
|
\quotes_language swedish
|
|
\papercolumns 1
|
|
\papersides 1
|
|
\paperpagestyle default
|
|
\tracking_changes false
|
|
\output_changes false
|
|
\html_math_output 0
|
|
\html_css_as_file 0
|
|
\html_be_strict false
|
|
\end_header
|
|
|
|
\begin_body
|
|
|
|
\begin_layout Title
|
|
Linux IPv6 HOWTO (en)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
<author><firstname>Peter</firstname><surname>Bieringer</surname><affiliation><ad
|
|
dress>pb at bieringer dot de</address></affiliation></author>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
<revhistory>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
<revision> <revnumber>0.66wip</revnumber> <date>2013-05-13</date> <authorinitials
|
|
>PB</authorinitials></revision>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
<revision> <revnumber>0.65</revnumber> <date>2009-12-13</date> <authorinitials>PB
|
|
</authorinitials></revision>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
<revision> <revnumber>0.64</revnumber> <date>2009-06-11</date> <authorinitials>PB
|
|
</authorinitials></revision>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
<revision> <revnumber>0.60</revnumber> <date>2007-05-31</date> <authorinitials>PB
|
|
</authorinitials></revision>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
<revision> <revnumber>0.51</revnumber> <date>2006-11-08</date> <authorinitials>PB
|
|
</authorinitials></revision>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset ERT
|
|
status open
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
</revhistory>
|
|
\end_layout
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Abstract
|
|
The goal of the Linux IPv6 HOWTO is to answer both basic and advanced questions
|
|
about IPv6 on the Linux operating system.
|
|
This HOWTO will provide the reader with enough information to install,
|
|
configure, and use IPv6 applications on Linux machines.
|
|
Intermediate releases of this HOWTO are available at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "mirrors.bieringer.de"
|
|
target "http://mirrors.bieringer.de/Linux+IPv6-HOWTO/"
|
|
|
|
\end_inset
|
|
|
|
or
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "mirrors.deepspace6.net"
|
|
target "http://mirrors.deepspace6.net/Linux+IPv6-HOWTO/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
See also
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "revision history"
|
|
reference "revision-history"
|
|
|
|
\end_inset
|
|
|
|
for changes.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-general"
|
|
|
|
\end_inset
|
|
|
|
General
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Information about available translations you will find in section
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Translations"
|
|
reference "general-translations"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "general-copright"
|
|
|
|
\end_inset
|
|
|
|
Copyright, license and others
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Copyright
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Written and Copyright (C) 2001-2013 by Peter Bieringer
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
License
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\series bold
|
|
This Linux IPv6 HOWTO is published under GNU GPL version 2
|
|
\series default
|
|
:
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The Linux IPv6 HOWTO, a guide how to configure and use IPv6 on Linux systems.
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Copyright
|
|
\lang ngerman
|
|
©
|
|
\lang english
|
|
2001-2013 Peter Bieringer
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This documentation is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation; either version 2 of the License, or (at your
|
|
option) any later version.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE.
|
|
See the GNU General Public License for more details.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110, USA.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
About the author
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Internet/IPv6 history of the author
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
1993: I got in contact with the Internet using console based e-mail and
|
|
news client (e.g.
|
|
look for
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
e91abier
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "groups.google.com"
|
|
target "http://groups.google.com/"
|
|
|
|
\end_inset
|
|
|
|
, that's me).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
1996: I got a request for designing a course on IPv6, including a workshop
|
|
with the Linux operating system.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
1997: Started writing a guide on how to install, configure and use IPv6
|
|
on Linux systems, called
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
(see
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo/History"
|
|
target "http://www.bieringer.de/linux/IPv6/IPv6-HOWTO/IPv6-HOWTO-0.html#history"
|
|
|
|
\end_inset
|
|
|
|
for more information).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
2001: Started writing this new Linux IPv6 HOWTO.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Contact
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The author can be contacted via e-mail at <pb at bieringer dot de> and also
|
|
via his
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "homepage"
|
|
target "http://www.bieringer.de/pb/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
He's currently living in Munich / Bavaria / Germany / Europe / Earth.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "general-category"
|
|
|
|
\end_inset
|
|
|
|
Category
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This HOWTO should be listed in category
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
|
|
\emph on
|
|
Networking
|
|
\emph default
|
|
/
|
|
\emph on
|
|
Protocols
|
|
\emph default
|
|
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Version, History and To-Do
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Version
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The current version is shown at the beginning of the document.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
CVS information:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CVS-ID: $Id$
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For other available versions/translations see also
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.bieringer.de/linux/IPv6/"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
History
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Major history
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2001-11-30: Starting to design new HOWTO.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-01-02: A lot of content completed, first public release of chapter
|
|
1 (version 0.10).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-01-14: More completed, some reviews, public release of the whole document
|
|
(version 0.14).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-08-16: Polish translation is in progress
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-10-31: Chinese translation is available (see
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Translations"
|
|
reference "general-translations"
|
|
|
|
\end_inset
|
|
|
|
for more)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-11-10: German translation is in progress
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-02-10: German translation is available
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-04-09: French translation is in progress
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-05-09: French translation is available
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-10-16: Italian translation is in progress
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2004-03-12: Italian translation is available
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2004-06-18: Greek translation is in progress
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2005-07-25: Turkish translation is availble
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2007-03-28: Portuguese-Brazil translation is in progress
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2008-07-30: Spanish translation is available (but still in progress)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2011-05-09: Portuguese-Brazil translation is again in progress
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Full history
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "revision history"
|
|
reference "revision-history"
|
|
|
|
\end_inset
|
|
|
|
at the end of this document.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
To-Do
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Fill in missing content
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Finishing grammar checking
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "general-translations"
|
|
|
|
\end_inset
|
|
|
|
Translations
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Translations always have to contain the URL, version number and copyright
|
|
of the original document (but yours, too).
|
|
Pls.
|
|
don't translate the original changelog, this is not very useful - also
|
|
do not translate the full section about available translations, can be
|
|
run out-of-date, add an URL to this section here in the English howto.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Looks like the document's change frequency is mostly less than once per
|
|
month.
|
|
Since version 0.27 it looks like that most of the content contributed by
|
|
me has been written.
|
|
Translations always have to use the English version as source.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
To language
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: an overview with URLs can be found at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.bieringer.de/linux/IPv6/"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Chinese
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A Chinese translation by Burma Chen <expns at yahoo dot com> (announced
|
|
to me at 2002-10-31) can be found on the TLDP:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/zh/Linux-IPv6-HOWTO.txt.gz (g'zipped txt)"
|
|
target "http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/zh/Linux-IPv6-HOWTO.txt.gz"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
It's a snapshot translation, don't know whether kept up-to-date.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Polish
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Since 2002-08-16 a Polish translation was started and is still in progress
|
|
by Lukasz Jokiel <Lukasz dot Jokiel at klonex dot com dot pl>.
|
|
Taken source: CVS-version 1.29 of LyX file, which was source for howto version
|
|
0.27.
|
|
Status is still work-in-progress (2004-08-30).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
German
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With 2002-11-10 a German translation was started by Georg Käfer <gkaefer
|
|
at gmx dot at> and the first public version was published 2003-02-10.
|
|
It's originally available on Deep Space 6 at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://mirrors.deepspace6.net/Linux+IPv6-HOWTO-de/"
|
|
target "http://mirrors.deepspace6.net/Linux+IPv6-HOWTO-de/"
|
|
|
|
\end_inset
|
|
|
|
(mirrored e.g.
|
|
on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://mirrors.bieringer.de/Linux+IPv6-HOWTO-de/"
|
|
target "http://mirrors.bieringer.de/Linux+IPv6-HOWTO-de/"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
This version will stay up-to-date as much as possible.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
French
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With 2003-04-09 a French translation was started by Michel Boucey <mboucey
|
|
at free dot fr> and the first public version was published 2003-05-09.
|
|
It's originally available on Deep Space 6 at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://mirrors.deepspace6.net/Linux+IPv6-HOWTO-fr/"
|
|
target "http://mirrors.deepspace6.net/Linux+IPv6-HOWTO-fr/"
|
|
|
|
\end_inset
|
|
|
|
(mirrored e.g.
|
|
on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://mirrors.bieringer.de/Linux+IPv6-HOWTO-fr/"
|
|
target "http://mirrors.bieringer.de/Linux+IPv6-HOWTO-fr/"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Spanish
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A member of the MontevideoLibre, a project in Uruguay (South America) starts
|
|
the translation into Spanish in wiki format:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.montevideolibre.org./manuales:libros:ipv6"
|
|
target "http://www.montevideolibre.org./manuales:libros:ipv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Italian
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With 2003-10-16 a Italian translation was started by Michele Ferritto <m
|
|
dot ferritto at virgilio dot it> for the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ILDP"
|
|
target "http://ildp.pluto.linux.it/"
|
|
|
|
\end_inset
|
|
|
|
(Italian Linux Documentation Project) and the first public version was
|
|
published 2004-03-12.
|
|
It's originally available on the ILDP at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://it.tldp.org/HOWTO/Linux+IPv6-HOWTO/"
|
|
target "http://it.tldp.org/HOWTO/Linux+IPv6-HOWTO/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Japanese
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
On 2003-05-14 Shino Taketani <shino_1305 at hotmail dot com> send me a note
|
|
that he planned to translate the HowTo into Japanese.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Greek
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
On 2004-06-18 Nikolaos Tsarmpopoulos <ntsarb at uth dot gr> send me a note
|
|
that he planned to translate the HowTo into Greek.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Turkish
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
On 2005-07-18 Necdet Yucel <nyucel at comu dot edu dot tr> send me a note
|
|
that a Turkish translation is available.
|
|
It's a snapshot translation (currently of 0.61) and can be found at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://docs.comu.edu.tr/howto/ipv6-howto.html"
|
|
target "http://docs.comu.edu.tr/howto/ipv6-howto.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Portuguese-Brazil
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
On 2011-05-06 Gustavo Mendes de Carvalho <gmcarvalho at gmail dot com> start
|
|
to translate the HowTo in Portuguese-Brazil.
|
|
The first try in 2007 by Claudemir da Luz <claudemir dot daluz at virtuallink
|
|
dot com dot br> was never finished.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Technical
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "general-original-source"
|
|
|
|
\end_inset
|
|
|
|
Original source of this HOWTO
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This HOWTO is currently written with LyX version 1.6.1 on a Fedora 10 Linux
|
|
system with template SGML/XML (DocBook book).
|
|
It's available on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "TLDP-CVS / users / Peter-Bieringer"
|
|
target "http://cvs.tldp.org/go.to/LDP/LDP/users/Peter-Bieringer/"
|
|
|
|
\end_inset
|
|
|
|
for contribution.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Code line wrapping
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Code line wrapping is done using selfmade utility
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
lyxcodelinewrapper.pl
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, you can get it from CVS for your own usage:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "TLDP-CVS / users / Peter-Bieringer"
|
|
target "http://cvs.tldp.org/go.to/LDP/LDP/users/Peter-Bieringer/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
SGML generation
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
SGML/XML is generated using export function in LyX.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
On-line references to the HTML version of this HOWTO (linking/anchors)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Master index page
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Generally, a reference to the master index page is recommended.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Dedicated pages
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because the HTML pages are generated out of the SGML file, the HTML filenames
|
|
turn out to be quite random.
|
|
However, some pages are tagged in LyX, resulting in static names.
|
|
These tags are useful for references and shouldn't be changed in the future.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If you think that I have forgotten a tag, please let me know, and I will
|
|
add it.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Preface
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Some things first:
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
How many versions of a Linux & IPv6 related HOWTO are floating around?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Including this, there are three (3) HOWTO documents available.
|
|
Apologies, if that is too many ;-)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Linux IPv6 FAQ/HOWTO (outdated)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The first IPv6 related document was written by
|
|
\emph on
|
|
Eric Osborne
|
|
\emph default
|
|
and called
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux IPv6 FAQ/HOWTO"
|
|
target "http://www.linuxhq.com/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
(please use it only for historical issues).
|
|
|
|
\series bold
|
|
Latest
|
|
\series default
|
|
|
|
\series bold
|
|
version
|
|
\series default
|
|
was 3.2.1 released July, 14
|
|
\series bold
|
|
1997
|
|
\series default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Please help: if someone knows the date of birth of this HOWTO, please send
|
|
me an e-mail (information will be needed in
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
history
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 & Linux - HowTo (maintained)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There exists a second version called
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
written by me (
|
|
\emph on
|
|
Peter Bieringer
|
|
\emph default
|
|
) in pure HTML.
|
|
|
|
\series bold
|
|
It was born
|
|
\series default
|
|
April
|
|
\series bold
|
|
1997
|
|
\series default
|
|
and the first English version was published in June 1997.
|
|
I will continue to
|
|
\series bold
|
|
maintain
|
|
\series default
|
|
it, but it will slowly fade (but not full) in favour of the Linux IPv6 HOWTO
|
|
you are currently reading.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Linux IPv6 HOWTO (this document)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
is written in pure HTML it's not really compatible with the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "The Linux Documentation Project (TLDP)"
|
|
target "http://www.tldp.org/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
I (
|
|
\emph on
|
|
Peter Bieringer
|
|
\emph default
|
|
) got a request in late November 2001 to rewrite the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
in SGML.
|
|
However, because of the discontinuation of that HOWTO (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Future of IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/IPv6-HOWTO/IPv6-HOWTO-0.html#history"
|
|
|
|
\end_inset
|
|
|
|
), and as IPv6 is becoming more and more standard, I decided to write a
|
|
new document covering basic and advanced issues which will remain important
|
|
over the next few years.
|
|
More dynamic and some advanced content will be still found further on in
|
|
the second HOWTO (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Used terms, glossary and shortcuts
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Network related
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Base
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
10 Well known decimal number system, represent any value with digit 0-9.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Base
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
16 Usually used in lower and higher programming languages, known also as
|
|
hexadecimal number system, represent any value with digit 0-9 and char
|
|
A-F (case insensitive).
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Base
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
85 Representation of a value with 85 different digits/chars, this can lead
|
|
to shorter strings but never seen in the wild.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Bit Smallest storage unit, on/true (1) or off/false (0)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Byte Mostly a collection of 8 (but not really a must - see older computer
|
|
systems) bits
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Device Here, hardware of network connection, see also NIC
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Dual
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
homed
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
host A dual homed host is a node with two network (physical or virtual)
|
|
interfaces on two different links, but does not forward any packets between
|
|
the interfaces.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Host Generally a single homed host on a link.
|
|
Normally it has only one active network interface, e.g.
|
|
Ethernet or (not and) PPP.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Interface Mostly same as
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
device
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, see also NIC
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
IP
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
Header Header of an IP packet (each network packet has a header, kind of
|
|
is depending on network layer)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Link A link is a layer 2 network packet transport medium, examples are Ethernet,
|
|
Token Ring, PPP, SLIP, ATM, ISDN, Frame Relay,...
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Node A node is a host or a router.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Octet A collection of 8 real bits, today also similar to
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
byte
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Port Information for the TCP/UDP dispatcher (layer 4) to transport information
|
|
to upper layers
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Protocol Each network layer contains mostly a protocol field to make life
|
|
easier on dispatching transported information to upper layer, seen in layer
|
|
2 (MAC) and 3 (IP)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Router A router is a node with two or more network (physical or virtual)
|
|
interfaces, capable of forwarding packets between the interfaces.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Socket An IP socket is defined by source and destination IP addresses and
|
|
Ports and (binding)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Stack Network related a collection of layers
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Subnetmask IP networks uses bit masks to separate local networks from remote
|
|
ones
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Tunnel A tunnel is typically a point-to-point connection over which packets
|
|
are exchanged which carry the data of another protocol, e.g.
|
|
an IPv6-in-IPv4 tunnel.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "Glossar"
|
|
|
|
\end_inset
|
|
|
|
Shortcuts
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
ACL Access Control List
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
API Application Programming Interface
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
ASIC Application Specified Integrated Circuit
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
BSD Berkeley Software Distribution
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
CAN-Bus Controller Area Network Bus (physical bus system)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
ISP Internet Service Provider
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
KAME Project - a joint effort of six companies in Japan to provide a free
|
|
IPv6 and IPsec (for both IPv4 and IPv6) stack for BSD variants to the world
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "www.kame.net"
|
|
target "http://www.kame.net/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
LIR Local Internet Registry
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
NIC Network Interface Card
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
RFC Request For Comments - set of technical and organizational notes about
|
|
the Internet
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
USAGI UniverSAl playGround for Ipv6 Project - works to deliver the production
|
|
quality IPv6 protocol stack for the Linux system.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Document related
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Long code line wrapping signal char
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The special character
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
¬
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is used for signaling that this code line is wrapped for better viewing
|
|
in PDF and PS files.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Placeholders
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In generic examples you will sometimes find the following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
<myipaddress>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For real use on your system command line or in scripts this has to be replaced
|
|
with relevant content (removing the < and > of course), the result would
|
|
be e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Commands in the shell
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Commands executable as non-root user begin with $, e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
$ whoami
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Commands executable as root user begin with #, e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# whoami
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Requirements for using this HOWTO
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Personal prerequisites
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experience with Unix tools
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You should be familiar with the major Unix tools e.g.
|
|
|
|
\emph on
|
|
grep
|
|
\emph default
|
|
,
|
|
\emph on
|
|
awk
|
|
\emph default
|
|
,
|
|
\emph on
|
|
find
|
|
\emph default
|
|
, ...
|
|
, and know about their most commonly used command-line options.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experience with networking theory
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You should know about layers, protocols, addresses, cables, plugs, etc.
|
|
If you are new to this field, here is one good starting point for you:
|
|
|
|
\lang ngerman
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.rigacci.org/docs/biblio/online/intro_to_networking/book1.htm"
|
|
target "http://www.rigacci.org/docs/biblio/online/intro_to_networking/book1.htm"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experience with IPv4 configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You should definitely have some experience in IPv4 configuration, otherwise
|
|
it will be hard for you to understand what is really going on.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experience with the Domain Name System (DNS)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Also you should understand what the Domain Name System (DNS) is, what it
|
|
provides and how to use it.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experience with network debugging strategies
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You should at least understand how to use
|
|
\emph on
|
|
tcpdump
|
|
\emph default
|
|
and what
|
|
\emph on
|
|
|
|
\emph default
|
|
it can show you.
|
|
Otherwise, network debugging will very difficult for you.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Linux operating system compatible hardware
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Surely you wish to experiment with real hardware, and not only read this
|
|
HOWTO to fall asleep here and there.
|
|
;-7)
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-basics"
|
|
|
|
\end_inset
|
|
|
|
Basics
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
What is IPv6?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6 is a new layer 3 protocol
|
|
\color none
|
|
which will supersede IPv4 (also known as IP).
|
|
IPv4 was designed a long time ago (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 760 / Internet Protocol"
|
|
target "http://www.faqs.org/rfcs/rfc760.html"
|
|
|
|
\end_inset
|
|
|
|
from January 1980) and since its inception, there have been many requests
|
|
for more addresses and enhanced capabilities.
|
|
Latest RFC is
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 2460 / Internet Protocol Version 6 Specification"
|
|
target "http://www.faqs.org/rfcs/rfc2460.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Major changes in IPv6 are the redesign of the header, including the increase
|
|
of address size from 32 bits to 128 bits.
|
|
Because layer 3 is responsible for end-to-end packet transport using packet
|
|
routing based on addresses, it must include the new IPv6 addresses (source
|
|
and destination), like IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For more information about the IPv6 history take a look at older IPv6 related
|
|
RFCs listed e.g.
|
|
at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SWITCH IPv6 Pilot / References"
|
|
target "http://www.switch.ch/lan/ipv6/references.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "basic-history-IPv6-Linux"
|
|
|
|
\end_inset
|
|
|
|
History of IPv6 in Linux
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The years 1992, 1993 and 1994 of the IPv6 History (in general) are covered
|
|
by the following document:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 or IPng (IP next generation)"
|
|
target "http://www.laynetworks.com/IPv6.htm#CH3"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To-do: better time-line, more content...
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Beginning
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The first IPv6 related network code was added to the Linux kernel 2.1.8 in
|
|
November 1996 by Pedro Roque.
|
|
It was based on the BSD API:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
diff -u --recursive --new-file v2.1.7/linux/include/linux/in6.h
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ linux/include/linux/in6.h
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
--- v2.1.7/linux/include/linux/in6.h Thu Jan 1 02:00:00 1970
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+++ linux/include/linux/in6.h Sun Nov 3 11:04:42 1996
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
@@ -0,0 +1,99 @@
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ * Types and definitions for AF_INET6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ * Linux INET6 implementation
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ * + * Authors:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ * Pedro Roque <******>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ *
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ * Source:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ * IPv6 Program Interfaces for BSD Systems
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ * <draft-ietf-ipngwg-bsd-api-05.txt>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The shown lines were copied from patch-2.1.8 (e-mail address was blanked on
|
|
copy&paste).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
In between
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because of lack of manpower, the IPv6 implementation in the kernel was unable
|
|
to follow the discussed drafts or newly released RFCs.
|
|
In October 2000, a project was started in Japan, called
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
, whose aim was to implement all missing, or outdated IPv6 support in Linux.
|
|
It tracks the current IPv6 implementation in FreeBSD made by the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "KAME project"
|
|
target "http://www.kame.net/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
From time to time they create snapshots against current vanilla Linux kernel
|
|
sources.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Until kernel development series 2.5.x was started, the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
patch was so big, that Linux networking maintainers were unable to include
|
|
it completly in the production source of the Linux kernel 2.4.x series.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
During kernel development series 2.5.x,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
tried to insert all of their current extensions into this.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Current
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Many of the long-term developed IPv6 related patches by
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
and others are integrated into vanilla kernel series 2.6.x.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Future
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
and others are still working on implementation of newer features like mobililty
|
|
and others.
|
|
From time to time, new extension patches are released and also integration
|
|
into vanilla kernel series is made.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
What do IPv6 addresses look like?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
As previously mentioned, IPv6 addresses are 128 bits long.
|
|
This number of bits generates very high decimal numbers with up to 39 digits:
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2^128-1: 340282366920938463463374607431768211455
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Such numbers are not really addresses that can be memorized.
|
|
Also the IPv6 address schema is bitwise oriented (just like IPv4, but that's
|
|
not often recognized).
|
|
Therefore a better notation of such big numbers is hexadecimal.
|
|
In hexadecimal, 4 bits (also known as
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
nibble
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
) are represented by a digit or character from 0-9 and a-f (10-15).
|
|
This format reduces the length of the IPv6 address to 32 characters.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2^128-1: 0xffffffffffffffffffffffffffffffff
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
This representation is still not very convenient (possible mix-up or loss
|
|
of single hexadecimal digits), so the designers of IPv6 chose a hexadecimal
|
|
format with a colon as separator after each block of 16 bits.
|
|
In addition, the leading "
|
|
\family typewriter
|
|
0x
|
|
\family default
|
|
" (a signifier for hexadecimal values used in programming languages) is
|
|
removed:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2^128-1: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
A usable address (see address types later) is e.g.:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:0100:f101:0210:a4ff:fee3:9566
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
For simplifications, leading zeros of each 16 bit block can be omitted:
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:0100:f101:0210:a4ff:fee3:9566 ->
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:db8:100:f101:210:a4ff:fee3:9566
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
One sequence of 16 bit blocks containing only zeroes can be replaced with
|
|
|
|
\begin_inset Quotes eld
|
|
\end_inset
|
|
|
|
|
|
\family typewriter
|
|
::
|
|
\family default
|
|
|
|
\begin_inset Quotes eld
|
|
\end_inset
|
|
|
|
.
|
|
But not more than one at a time, otherwise it is no longer a unique representat
|
|
ion.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100:f101:0:0:0:1 -> 2001:db8:100:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
The biggest reduction is seen by the IPv6 localhost address:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0000:0000:0000:0000:0000:0000:0000:0001 -> ::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
There is also a so-called
|
|
\emph on
|
|
compact
|
|
\emph default
|
|
(base85 coded) representation defined in
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1924 / A Compact Representation of IPv6 Addresses"
|
|
target "http://www.faqs.org/rfcs/rfc1924.html"
|
|
|
|
\end_inset
|
|
|
|
(published on 1.
|
|
April 1996), never seen in the wild, probably an April fool's joke, but
|
|
here is an example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ipv6calc --addr_to_base85 2001:0db8:0100:f101:0210:a4ff:fee3:9566
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
9R}vSQZ1W=9A_Q74Lz&R
|
|
\end_layout
|
|
|
|
\begin_layout Quotation
|
|
Info:
|
|
\emph on
|
|
ipv6calc
|
|
\emph default
|
|
is an IPv6 address format calculator and converter program and can be found
|
|
here:
|
|
\lang ngerman
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ipv6calc homepage"
|
|
target "http://www.deepspace6.net/projects/ipv6calc.html"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/projects/ipv6calc.html"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
FAQ (Basics)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Why is the name IPv6 and not IPv5 as successor for IPv4?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
On any IP header, the first 4 bits are reserved for protocol version.
|
|
So theoretically a protocol number between 0 and 15 is possible:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
4: is already used for IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
5: is reserved for the Stream Protocol (STP,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1819 / Internet Stream Protocol Version 2"
|
|
target "http://www.faqs.org/rfcs/rfc1819.html"
|
|
|
|
\end_inset
|
|
|
|
) (which never really made it to the public)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
The next free number was 6.
|
|
Hence IPv6 was born!
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 addresses: why such a high number of bits?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
During the design of IPv4, people thought that 32 bits were enough for the
|
|
world.
|
|
Looking back into the past, 32 bits were enough until now and will perhaps
|
|
be enough for another few years.
|
|
However, 32 bits are not enough to provide each network device with a global
|
|
address in the future.
|
|
Think about mobile phones, cars (including electronic devices on its CAN-bus),
|
|
toasters, refrigerators, light switches, and so on...
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
So designers have chosen 128 bits, 4 times more in length than in IPv4 today.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The usable size is smaller than it may appear however.
|
|
This is because in the currently defined address schema, 64 bits are used
|
|
for interface identifiers.
|
|
The other 64 bits are used for routing.
|
|
Assuming the current strict levels of aggregation (/48, /32, ...), it is still
|
|
possible to
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
run out
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
of space, but hopefully not in the near future.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See also for more information
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1715 / The H Ratio for Address Assignment Efficiency"
|
|
target "http://www.faqs.org/rfcs/rfc1715.html"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3194 / The Host-Density Ratio for Address Assignment Efficiency"
|
|
target "http://www.faqs.org/rfcs/rfc3194.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 addresses: why so small a number of bits on a new design?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
While, there are (possibly) some people (only know about Jim Fleming...) on
|
|
the Internet who are thinking about IPv8 and IPv16, their design is far
|
|
away from acceptance and implementation.
|
|
In the meantime 128 bits was the best choice regarding header overhead
|
|
and data transport.
|
|
Consider the minimum Maximum Transfer Unit (MTU) in IPv4 (576 octets) and
|
|
in IPv6 (1280 octets), the header length in IPv4 is 20 octets (minimum,
|
|
can increase to 60 octets with IPv4 options) and in IPv6 is 40 octets (fixed).
|
|
This is 3.4 % of minimum MTU in IPv4 and 3.1 % of minimum MTU in IPv6.
|
|
This means the header overhead is almost equal.
|
|
More bits for addresses would require bigger headers and therefore more
|
|
overhead.
|
|
Also, consider the maximum MTU on normal links (like Ethernet today): it's
|
|
1500 octets (in special cases: 9k octets using Jumbo frames).
|
|
Ultimately, it wouldn't be a proper design if 10 % or 20 % of transported
|
|
data in a Layer-3 packet were used for addresses and not for payload.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-addresstypes"
|
|
|
|
\end_inset
|
|
|
|
Address types
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Like IPv4, IPv6 addresses can be split into network and host parts using
|
|
subnet masks.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv4 has shown that sometimes it would be nice, if more than one IP address
|
|
can be assigned to an interface, each for a different purpose (aliases,
|
|
multi-cast).
|
|
To remain extensible in the future, IPv6 is going further and allows more
|
|
than one IPv6 address to be assigned to an interface.
|
|
There is currently no limit defined by an RFC, only in the implementation
|
|
of the IPv6 stack (to prevent DoS attacks).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Using this large number of bits for addresses, IPv6 defines address types
|
|
based on some leading bits, which are hopefully never going to be broken
|
|
in the future (unlike IPv4 today and the history of class A, B, and C).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Also the number of bits are separated into a network part (upper 64 bits)
|
|
and a host part (lower 64 bits), to facilitate auto-configuration.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Addresses without a special prefix
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Localhost address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This is a special address for the loopback interface, similiar to IPv4 with
|
|
its
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
127.0.0.1
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
With IPv6, the localhost address is:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0000:0000:0000:0000:0000:0000:0000:0001
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
or compressed:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Packets with this address as source or destination should never leave the
|
|
sending host.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Unspecified address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This is a special address like
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
any
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
or
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0.0.0.0
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
in IPv4 .
|
|
For IPv6 it's:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0000:0000:0000:0000:0000:0000:0000:0000
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
or:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
These addresses are mostly used/seen in socket binding (to any IPv6 address)
|
|
or routing tables.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: the unspecified address cannot be used as destination address.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 address with embedded IPv4 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There are two addresses which contain an IPv4 address.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv4-mapped IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv4-only IPv6-compatible addresses are sometimes used/shown for sockets
|
|
created by an IPv6-enabled daemon, but only binding to an IPv4 address.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
These addresses are defined with a special prefix of length 96 (a.b.c.d is
|
|
the IPv4 address):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0:0:0:0:0:ffff:a.b.c.d/96
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
or in compressed format
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::ffff:a.b.c.d/96
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For example, the IPv4 address 1.2.3.4 looks like this:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::ffff:1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv4-compatible IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv4-compatible IPv6 addresses are used for automatic tunneling (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 2893 / Transition Mechanisms for IPv6 Hosts and Routers"
|
|
target "http://www.faqs.org/rfcs/rfc2893.html"
|
|
|
|
\end_inset
|
|
|
|
), which is being replaced by
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "6to4 tunneling"
|
|
reference "tunneling-6to4"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0:0:0:0:0:0:a.b.c.d/96
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
or in compressed format
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::a.b.c.d/96
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Network part, also known as prefix
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Designers defined some address types and left a lot of scope for future
|
|
definitions as currently unknown requirements arise.
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4291 / IP Version 6 Addressing Architecture"
|
|
target "http://www.faqs.org/rfcs/rfc4291.html"
|
|
|
|
\end_inset
|
|
|
|
defines the current addressing scheme.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Now lets take a look at the different types of prefixes (and therefore address
|
|
types):
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Link local address type
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
These are special addresses which will only be valid on a link of an interface.
|
|
Using this address as destination the packet would never pass through a
|
|
router.
|
|
It's used for link communications such as:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
anyone else here on this link?
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
anyone here with a special address (e.g.
|
|
looking for a router)?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
They begin with ( where
|
|
\emph on
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
x
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\emph default
|
|
is any hex character, normally
|
|
\emph on
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0
|
|
\emph default
|
|
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fe8x: <- currently the only one in use
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fe9x:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
feax:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
febx:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
An address with this prefix is found on each IPv6-enabled interface after
|
|
stateless auto-configuration (which is normally always the case).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Site local address type
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
These are addresses similar to the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1918 / Address Allocation for Private Internets"
|
|
target "http://www.faqs.org/rfcs/rfc1918.html"
|
|
|
|
\end_inset
|
|
|
|
in IPv4 today, with the added advantage that everyone who use this address
|
|
type has the capability to use the given 16 bits for a maximum number of
|
|
65536 subnets.
|
|
Comparable with the
|
|
\family typewriter
|
|
10.0.0.0/8
|
|
\family default
|
|
in IPv4 today.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Another advantage: because it's possible to assign more than one address
|
|
to an interface with IPv6, you can also assign such a site local address
|
|
in addition to a global one.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
It begins with:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fecx: <- most commonly used
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fedx:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
feex:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fefx:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
(where
|
|
\emph on
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
x
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\emph default
|
|
is any hex character, normally
|
|
\emph on
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0
|
|
\emph default
|
|
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This address type is now deprecated
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3879 / Deprecating Site Local Addresses"
|
|
target "http://www.faqs.org/rfcs/rfc3879.html"
|
|
|
|
\end_inset
|
|
|
|
, but for a test in a lab, such addresses are still a good choice in my
|
|
humble opinion.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Unique Local IPv6 Unicast Addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because the original defined site local addresses are not unique, this can
|
|
lead to major problems, if two former independend networks would be connected
|
|
later (overlapping of subnets).
|
|
This and other issues lead to a new address type named
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4193 / Unique Local IPv6 Unicast Addresses"
|
|
target "http://www.faqs.org/rfcs/rfc4193.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
It begins with:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fcxx:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fdxx: <- currently the only one in use
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
A part of the prefix (40 bits) are generated using a pseudo-random algorithm
|
|
and it's improbable, that two generated ones are equal.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example for a prefix (generated using a web-based tool:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Goebel Consult / createLULA"
|
|
target "http://www.goebel-consult.de/ipv6/createLULA"
|
|
|
|
\end_inset
|
|
|
|
):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fd0f:8b72:ac90::/48
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Global address type "(Aggregatable) global unicast"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Today, there is one global address type defined (the first design, called
|
|
"provider based," was thrown away some years ago
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1884 / IP Version 6 Addressing Architecture [obsolete]"
|
|
target "http://www.faqs.org/rfcs/rfc1884.html"
|
|
|
|
\end_inset
|
|
|
|
, you will find some remains in older Linux kernel sources).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
It begins with (
|
|
\emph on
|
|
x
|
|
\emph default
|
|
are hex characters)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2xxx:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3xxx:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: the prefix
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
aggregatable
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is thrown away in current drafts.
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
There are some further subtypes defined, see below:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
6bone test addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
These were the first global addresses which were defined and in use.
|
|
They all start with
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3ffe:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3ffe:ffff:100:f102::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A special 6bone test address which will never be globally unique begins
|
|
with
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3ffe:ffff:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
and is mostly shown in older examples.
|
|
The reason for this is, if real addresses are are shown, it's possible
|
|
for someone to do a copy & paste to their configuration files, thus inadvertent
|
|
ly causing duplicates on a globally unique address.
|
|
This would cause serious problems for the original host (e.g.
|
|
getting answer packets for request that were never sent).
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Because IPv6 is now in production, this prefix is no longer be delegated
|
|
and is removed from routing after 6.6.2006 (see
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3701 / 6bone Phaseout"
|
|
target "http://www.faqs.org/rfcs/rfc3701.html"
|
|
|
|
\end_inset
|
|
|
|
for more).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
6to4 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
These addresses, designed for a special tunneling mechanism [
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds"
|
|
target "http://www.faqs.org/rfcs/rfc3056.html"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 2893 / Transition Mechanisms for IPv6 Hosts and Routers"
|
|
target "http://www.faqs.org/rfcs/rfc2893.html"
|
|
|
|
\end_inset
|
|
|
|
], encode a given IPv4 address and a possible subnet and begin with
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2002:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For example, representing 192.168.1.1/5:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2002:c0a8:0101:5::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A small shell command line can help you generating such address out of a
|
|
given IPv4 one:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ipv4="1.2.3.4"; sla="5"; printf "2002:%02x%02x:%02x%02x:%04x::1" `echo $ipv4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ | tr "." " "` $sla
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See also
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "tunneling using 6to4"
|
|
reference "tunneling-6to4"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "information about 6to4 relay routers"
|
|
reference "information-joinipv6-6to4-tunneling"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Assigned by provider for hierarchical routing
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
These addresses are delegated to Internet service providers (ISP) and begin
|
|
currently with
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Prefixes to major (backbone owning) ISPs (also known as LIRs) are delegated
|
|
by
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "local registries"
|
|
reference "information-majorregionregistries"
|
|
|
|
\end_inset
|
|
|
|
and currently have a prefix with length 32 assigned.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Any ISP customer can get a prefix with length 48.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Addresses reserved for examples and documentation
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Currently, two address ranges are reserved for examples and documentation
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3849 / IPv6 Address Prefix Reserved for Documentation"
|
|
target "http://www.faqs.org/rfcs/rfc3849.html"
|
|
|
|
\end_inset
|
|
|
|
:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3fff:ffff::/32
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0DB8::/32 EXAMPLENET-WF
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
These address ranges should be filtered based on source addresses and should
|
|
NOT be routed on border routers to the internet, if possible.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Multicast addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Multicast addresses are used for related services.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
They alway start with (
|
|
\emph on
|
|
xx
|
|
\emph default
|
|
is the scope value)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ffxy:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
They are split into scopes and types:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Multicast scopes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Multicast scope is a parameter to specify the maximum distance a multicast
|
|
packet can travel from the sending entity.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Currently, the following regions (scopes) are defined:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx1: node-local, packets never leave the node.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx2: link-local, packets are never forwarded by routers, so they never
|
|
leave the specified link.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx5: site-local, packets never leave the site.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx8: organization-local, packets never leave the organization (not so easy
|
|
to implement, must be covered by routing protocol).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffxe: global scope.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
others are reserved
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Multicast types
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There are many types already defined/reserved (see
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4291 / IP Version 6 Addressing Architecture"
|
|
target "http://www.faqs.org/rfcs/rfc4291.html"
|
|
|
|
\end_inset
|
|
|
|
for details).
|
|
Some examples are:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
All Nodes Address: ID = 1h, addresses all hosts on the local node (ff01:0:0:0:0:
|
|
0:0:1) or the connected link (ff02:0:0:0:0:0:0:1).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
All Routers Address: ID = 2h, addresses all routers on the local node (ff01:0:0:
|
|
0:0:0:0:2), on the connected link (ff02:0:0:0:0:0:0:2), or on the local
|
|
site (ff05:0:0:0:0:0:0:2)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Solicited node link-local multicast address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Special multicast address used as destination address in neighborhood discovery,
|
|
because unlike in IPv4, ARP no longer exists in IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
An example of this address looks like
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ff02::1:ff00:1234
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Used prefix shows that this is a link-local multicast address.
|
|
The suffix is generated from the destination address.
|
|
In this example, a packet should be sent to address
|
|
\begin_inset Quotes eld
|
|
\end_inset
|
|
|
|
fe80::1234
|
|
\begin_inset Quotes erd
|
|
\end_inset
|
|
|
|
, but the network stack doesn't know the current layer 2 MAC address.
|
|
It replaces the upper 104 bits with
|
|
\begin_inset Quotes eld
|
|
\end_inset
|
|
|
|
ff02:0:0:0:0:1:ff00::/104
|
|
\begin_inset Quotes erd
|
|
\end_inset
|
|
|
|
and leaves the lower 24 bits untouched.
|
|
This address is now used `on-link' to find the corresponding node which
|
|
has to send a reply containing its layer 2 MAC address.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Anycast addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Anycast addresses are special addresses and are used to cover things like
|
|
nearest DNS server, nearest DHCP server, or similar dynamic groups.
|
|
Addresses are taken out of the unicast address space (aggregatable global
|
|
or site-local at the moment).
|
|
The anycast mechanism (client view) will be handled by dynamic routing
|
|
protocols.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: Anycast addresses cannot be used as source addresses, they are only
|
|
used as destination addresses.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Subnet-router anycast address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A simple example for an anycast address is the subnet-router anycast address.
|
|
Assuming that a node has the following global assigned IPv6 address:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:100:f101:210:a4ff:fee3:9566/64 <- Node's address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The subnet-router anycast address will be created blanking the suffix (least
|
|
significant 64 bits) completely:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:100:f101::/64 <- subnet-router anycast address
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Address types (host part)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
For auto-configuration and mobility issues, it was decided to use the lower
|
|
64 bits as the host part of the address in most of the current address
|
|
types.
|
|
Therefore each single subnet can hold a large amount of addresses.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
This host part can be inspected differently:
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Automatically computed (also known as stateless)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With auto-configuration, the host part of the address is computed by converting
|
|
the MAC address of an interface (if available), with the EUI-64 method,
|
|
to a unique IPv6 address.
|
|
If no MAC address is available for this device (happens e.g.
|
|
on virtual devices), something else (like the IPv4 address or the MAC address
|
|
of a physical interface) is used instead.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
E.g.
|
|
a NIC has following MAC address (48 bit):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
00:10:a4:01:23:45
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
This would be expanded according to the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IEEE-Tutorial EUI-64"
|
|
target "http://standards.ieee.org/regauth/oui/tutorials/EUI64.html"
|
|
|
|
\end_inset
|
|
|
|
design for EUI-48 identifiers to the 64 bit interface identifier:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0210:a4ff:fe01:2345
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
With a given prefix, the result is the IPv6 address shown in example above:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:0100:f101:0210:a4ff:fe01:2345
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Privacy problem with automatically computed addresses and a solution
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Because the "automatically computed" host part is globally unique (except
|
|
when a vendor of a NIC uses the same MAC address on more than one NIC),
|
|
client tracking is possible on the host when not using a proxy of any kind.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
This is a known problem, and a solution was defined: privacy extension,
|
|
defined in
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3041 / Privacy Extensions for Stateless Address Autoconfiguration in IPv6"
|
|
target "http://www.faqs.org/rfcs/rfc3041.html"
|
|
|
|
\end_inset
|
|
|
|
(there is also already a newer draft available:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "draft-ietf-ipv6-privacy-addrs-v2-*"
|
|
target "http://www.ietf.org/ids.by.wg/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
Using a random and a static value a new suffix is generated from time to
|
|
time.
|
|
Note: this is only reasonable for outgoing client connections and isn't
|
|
really useful for well-known servers.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Manually set
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For servers, it's probably easier to remember simpler addresses, this can
|
|
also be accommodated.
|
|
It is possible to assign an additional IPv6 address to an interface, e.g.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For manual suffixes like
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
::1
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
shown in the above example, it's required that the 7th most significant
|
|
bit is set to 0 (the universal/local bit of the automatically generated
|
|
identifier).
|
|
Also some other (otherwise unchosen ) bit combinations are reserved for
|
|
anycast addresses, too.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Prefix lengths for routing
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In the early design phase it was planned to use a fully hierarchical routing
|
|
approach to reduce the size of the routing tables maximally.
|
|
The reasons behind this approach were the number of current IPv4 routing
|
|
entries in core routers (> 104 thousand in May 2001), reducing the need
|
|
of memory in hardware routers (ASIC
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
Application Specified Integrated Circuit
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
driven) to hold the routing table and increase speed (fewer entries hopefully
|
|
result in faster lookups).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Todays view is that routing will be mostly hierarchically designed for networks
|
|
with only one service provider.
|
|
With more than one ISP connections, this is not possible, and subject to
|
|
an issue named multi-homing (infos on multi-homing:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "drafts-ietf-multi6-*"
|
|
target "http://www.ietf.org/ids.by.wg/multi6.html"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Multihoming Solutions"
|
|
target "http://arneill-py.sacramento.ca.us/ipv6mh/"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Prefix lengths (also known as "netmasks")
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Similar to IPv4, the routable network path for routing to take place.
|
|
Because standard netmask notation for 128 bits doesn't look nice, designers
|
|
employed the IPv4 Classless Inter Domain Routing (CIDR,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1519 / Classless Inter-Domain Routing"
|
|
target "http://www.faqs.org/rfcs/rfc1519.html"
|
|
|
|
\end_inset
|
|
|
|
) scheme, which specifies the number of bits of the IP address to be used
|
|
for routing.
|
|
It is also called the "slash" notation.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
An example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100:1:2:3:4:5/48
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
This notation will be expanded:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Network:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:0100:0000:0000:0000:0000:0000
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Netmask:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ffff:ffff:ffff:0000:0000:0000:0000:0000
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Matching a route
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Under normal circumstances (no QoS), a lookup in a routing table results
|
|
in the route with the most significant number of address bits being selected.
|
|
In other words, the route with the biggest prefix length matches first.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For example if a routing table shows following entries (list is not complete):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100::/48 :: U 1 0 0 sit1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2000::/3 ::192.88.99.1 UG 1 0 0 tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Shown destination addresses of IPv6 packets will be routed through shown
|
|
device
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100:1:2:3:4:5/48 -> routed through device sit1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:200:1:2:3:4:5/48 -> routed through device tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-systemcheck"
|
|
|
|
\end_inset
|
|
|
|
IPv6-ready system check
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Before you can start using IPv6 on a Linux host, you have to test, whether
|
|
your system is IPv6-ready.
|
|
You may have to do some work to enable it first.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "systemcheck-kernel"
|
|
|
|
\end_inset
|
|
|
|
IPv6-ready kernel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Modern Linux distributions already contain IPv6-ready kernels, the IPv6
|
|
capability is generally compiled as a module, but it's possible that this
|
|
module is not loaded automatically on startup.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\series bold
|
|
Note: you shouldn't anymore use kernel series 2.2.x, because it's not IPv6-up-to-d
|
|
ate anymore.
|
|
Also the IPv6 support in series 2.4.x is no longer improved according to
|
|
definitions in latest RFCs.
|
|
It's recommend to use series 2.6.x now.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Check for IPv6 support in the current running kernel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
To check, whether your current running kernel supports IPv6, take a look
|
|
into your
|
|
\family typewriter
|
|
/proc
|
|
\family default
|
|
-file-system.
|
|
Following entry must exists:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/proc/net/if_inet6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
A short automatical test looks like:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
If this fails, it is quite likely, that the IPv6 module is not loaded.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Try to load IPv6 module
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
You can try to load the IPv6 module executing
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# modprobe ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
If this is successful, this module should be listed, testable with following
|
|
auto-magically line:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# lsmod |grep -w 'ipv6' && echo "IPv6 module successfully loaded"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
And the check shown above should now run successfully.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: unloading the module is currently not supported and can result, under
|
|
some circumstances, in a kernel crash.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Automatically loading of module
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Its possible to automatically load the IPv6 module on demand.
|
|
You only have to add following line in the configuration file of the kernel
|
|
module loader (normally /etc/modules.conf or /etc/conf.modules):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
alias net-pf-10 ipv6 # automatically load IPv6 module on demand
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
It's also possible to disable automatically loading of the IPv6 module using
|
|
following line
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
alias net-pf-10 off # disable automatically load of IPv6 module on demand
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Additional note: in kernels series 2.6.x, the module loader mechanism was
|
|
changed.
|
|
The new configuration file has to be named /etc/modprobe.conf instead of
|
|
/etc/modules.conf.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Compile kernel with IPv6 capabilities
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
If both above shown results were negative and your kernel has no IP6 support,
|
|
than you have the following options:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Update your distribution to a current one which supports IPv6 out-of-the-box
|
|
(recommended for newbies)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Compile a new vanilla kernel (easy, if you know which options you needed)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Recompile kernel sources given by your Linux distribution (sometimes not
|
|
so easy)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Compile a kernel with USAGI extensions
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
If you decide to compile a kernel, you should have previous experience in
|
|
kernel compiling and read the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux Kernel HOWTO"
|
|
target "http://www.tldp.org/HOWTO/Kernel-HOWTO.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A comparison between vanilla and USAGI extended kernels is available on
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6+Linux-Status-Kernel"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-kernel.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Compiling a vanilla kernel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More detailed hints about compiling an IPv6-enabled kernel can be found
|
|
e.g.
|
|
on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6-HOWTO-2#kernel"
|
|
target "http://www.bieringer.de/linux/IPv6/IPv6-HOWTO/IPv6-HOWTO-2.html#kernel"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: you should use whenever possible kernel series 2.6.x or above, because
|
|
the IPv6 support in series 2.4.x only will no longer get backported features
|
|
from 2.6.x and IPv6 support in series 2.2.x is hopeless outdated.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Compiling a kernel with USAGI extensions
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Same as for vanilla kernel, only recommend for advanced users, which are
|
|
already familiar with IPv6 and kernel compilation.
|
|
See also
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI project / FAQ"
|
|
target "http://www.linux-ipv6.org/faq.html"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Obtaining the best IPv6 support with Linux (Article)"
|
|
target "http://www.deepspace6.net/docs/best_ipv6_support.html"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/docs/best_ipv6_support.html"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6-ready network devices
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Not all existing network devices have already (or ever) the capability to
|
|
transport IPv6 packets.
|
|
A current status can be found at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6+Linux-status-kernel.html#transport"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-kernel.html#transport"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A major issue is that because of the network layer structure of kernel implement
|
|
ation an IPv6 packet isn't really recognized by it's IP header number (6
|
|
instead of 4).
|
|
It's recognized by the protocol number of the Layer 2 transport protocol.
|
|
Therefore any transport protocol which doesn't use such protocol number
|
|
cannot dispatch IPv6 packets.
|
|
Note: the packet is still transported over the link, but on receivers side,
|
|
the dispatching won't work (you can see this e.g.
|
|
using tcpdump).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Currently known never
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
IPv6 capable links
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Serial Line IP (SLIP,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1055 / SLIP"
|
|
target "http://www.faqs.org/rfcs/rfc1055.html"
|
|
|
|
\end_inset
|
|
|
|
), should be better called now to SLIPv4, device named: slX
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Parallel Line IP (PLIP), same like SLIP, device names: plipX
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ISDN with encapsulation
|
|
\emph on
|
|
rawip
|
|
\emph default
|
|
, device names: isdnX
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Currently known
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
not supported IPv6 capable links
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ISDN with encapsulation
|
|
\emph on
|
|
syncppp
|
|
\emph default
|
|
, device names: ipppX (design issue of the ipppd, will be merged into more
|
|
general PPP layer in kernel series 2.5.x)
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
IPv6-ready network configuration tools
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
You wont get very far, if you are running an IPv6-ready kernel, but have
|
|
no tools to configure IPv6.
|
|
There are several packages in existence which can configure IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
net-tools package
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
The net-tool package includes some tools like
|
|
\family typewriter
|
|
ifconfig
|
|
\family default
|
|
and
|
|
\family typewriter
|
|
route
|
|
\family default
|
|
, which helps you to configure IPv6 on an interface.
|
|
Look at the output of
|
|
\family typewriter
|
|
ifconfig -?
|
|
\family default
|
|
or
|
|
\family typewriter
|
|
route -?
|
|
\family default
|
|
, if something is shown like IPv6 or inet6, then the tool is IPv6-ready.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Auto-magically check:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig -? 2>& 1|grep -qw 'inet6' && echo "utility 'ifconfig' is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ IPv6-ready"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Same check can be done for
|
|
\family typewriter
|
|
route
|
|
\family default
|
|
:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -? 2>& 1|grep -qw 'inet6' && echo "utility 'route' is IPv6-ready"
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
iproute package
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Alexey N.
|
|
Kuznetsov (current a maintainer of the Linux networking code) created a
|
|
tool-set which configures networks through the netlink device.
|
|
Using this tool-set you have more functionality than net-tools provides,
|
|
but its not very well documented and isn't for the faint of heart.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip 2>&1 |grep -qw 'inet6' && echo "utility 'ip' is IPv6-ready"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If the program /sbin/ip isn't found, then I strongly recommend you install
|
|
the iproute package.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
You can get it from your Linux distribution (if contained)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
You're able to look for a proper RPM package at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RPMfind/iproute"
|
|
target "http://rpmfind.net/linux/rpm2html/search.php?query=iproute"
|
|
|
|
\end_inset
|
|
|
|
(sometimes rebuilding of a SRPMS package is recommended)
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
IPv6-ready test/debug programs
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
After you have prepared your system for IPv6, you now want to use IPv6 for
|
|
network communications.
|
|
First you should learn how to examine IPv6 packets with a sniffer program.
|
|
This is strongly recommended because for debugging/troubleshooting issues
|
|
this can aide in providing a diagnosis very quickly.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "program-ping6"
|
|
|
|
\end_inset
|
|
|
|
IPv6 ping
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This program is normally included in package
|
|
\emph on
|
|
iputils
|
|
\emph default
|
|
.
|
|
It is designed for simple transport tests sending ICMPv6 echo-request packets
|
|
and wait for ICMPv6 echo-reply packets.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 <hostwithipv6address>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 <ipv6address>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 [-I <device>] <link-local-ipv6address>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 -c 1 ::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PING ::1(::1) from ::1 : 56 data bytes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
64 bytes from ::1: icmp_seq=0 hops=64 time=292 usec
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
--- ::1 ping statistics ---
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1 packets transmitted, 1 packets received, 0% packet loss
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
round-trip min/avg/max/mdev = 0.292/0.292/0.292/0.000 ms
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Hint: ping6 needs raw access to socket and therefore root permissions.
|
|
So if non-root users cannot use ping6 then there are two possible problems:
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
ping6 is not in users path (probably, because ping6 is generally stored
|
|
in /usr/sbin -> add path (not really recommended)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
ping6 doesn't execute properly, generally because of missing root permissions
|
|
-> chmod u+s /usr/sbin/ping6
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Specifying interface for IPv6 ping
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Using link-local addresses for an IPv6 ping, the kernel does not know through
|
|
which (physically or virtual) device it must send the packet - each device
|
|
has a link-local address.
|
|
A try will result in following error message:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 fe80::212:34ff:fe12:3456
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
connect: Invalid argument
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In this case you have to specify the interface additionally like shown here:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 -I eth0 -c 1 fe80::2e0:18ff:fe90:9205
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PING fe80::212:23ff:fe12:3456(fe80::212:23ff:fe12:3456) from
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ fe80::212:34ff:fe12:3478 eth0: 56 data bytes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
64 bytes from fe80::212:23ff:fe12:3456: icmp_seq=0 hops=64 time=445 usec
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
--- fe80::2e0:18ff:fe90:9205 ping statistics ---
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1 packets transmitted, 1 packets received, 0% packet loss round-trip
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ min/avg/max/mdev = 0.445/0.445/0.445/0.000 ms
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Ping6 to multicast addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
An interesting mechanism to detect IPv6-active hosts on a link is to ping6
|
|
to the link-local all-node multicast address:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 -I eth0 ff02::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PING ff02::1(ff02::1) from fe80:::2ab:cdff:feef:0123 eth0: 56 data bytes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.104 ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
64 bytes from fe80::212:34ff:fe12:3450: icmp_seq=1 ttl=64 time=0.549 ms (DUP!)
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Unlike in IPv4, where replies to a ping on the broadcast address can be
|
|
disabled, in IPv6 currently this behavior cannot be disable except by local
|
|
IPv6 firewalling.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "program-traceroute6"
|
|
|
|
\end_inset
|
|
|
|
IPv6 traceroute6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This program is normally included in package
|
|
\emph on
|
|
iputils
|
|
\emph default
|
|
.
|
|
It's a program similar to IPv4 traceroute.
|
|
Below you will see an example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# traceroute6 www.6bone.net
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
traceroute to 6bone.net (3ffe:b00:c18:1::10) from 2001:0db8:0000:f101::2,
|
|
30
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ hops max, 16 byte packets
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1 localipv6gateway (2001:0db8:0000:f101::1) 1.354 ms 1.566 ms 0.407 ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2 swi6T1-T0.ipv6.switch.ch (3ffe:2000:0:400::1) 90.431 ms 91.956 ms 92.377 ms
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3 3ffe:2000:0:1::132 (3ffe:2000:0:1::132) 118.945 ms 107.982 ms 114.557 ms
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
4 3ffe:c00:8023:2b::2 (3ffe:c00:8023:2b::2) 968.468 ms 993.392 ms 973.441
|
|
ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
5 3ffe:2e00:e:c::3 (3ffe:2e00:e:c::3) 507.784 ms 505.549 ms 508.928 ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
6 www.6bone.net (3ffe:b00:c18:1::10) 1265.85 ms * 1304.74 ms
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: unlike some modern versions of IPv4 traceroute, which can use ICMPv4
|
|
echo-request packets as well as UDP packets (default), current IPv6-traceroute
|
|
is only able to send UDP packets.
|
|
As you perhaps already know, ICMP echo-request packets are more accepted
|
|
by firewalls or ACLs on routers inbetween than UDP packets.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "program-tracepath6"
|
|
|
|
\end_inset
|
|
|
|
IPv6 tracepath6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This program is normally included in package
|
|
\emph on
|
|
iputils
|
|
\emph default
|
|
.
|
|
It's a program like traceroute6 and traces the path to a given destination
|
|
discovering the MTU along this path.
|
|
Below you will see an example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tracepath6 www.6bone.net
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1?: [LOCALHOST] pmtu 1480
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1: 3ffe:401::2c0:33ff:fe02:14 150.705ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2: 3ffe:b00:c18::5 267.864ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3: 3ffe:b00:c18::5 asymm 2 266.145ms pmtu 1280
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3: 3ffe:3900:5::2 asymm 4 346.632ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
4: 3ffe:28ff:ffff:4::3 asymm 5 365.965ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
5: 3ffe:1cff:0:ee::2 asymm 4 534.704ms
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
6: 3ffe:3800::1:1 asymm 4 578.126ms !N
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Resume: pmtu 1280
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "program-tcpdump"
|
|
|
|
\end_inset
|
|
|
|
IPv6 tcpdump
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
On Linux, tcpdump is the major tool for packet capturing.
|
|
Below you find some examples.
|
|
IPv6 support is normally built-in in current releases of version 3.6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
tcpdump uses expressions for filtering packets to minimize the noise:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
icmp6: filters native ICMPv6 traffic
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ip6: filters native IPv6 traffic (including ICMPv6)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
proto ipv6: filters tunneled IPv6-in-IPv4 traffic
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
not port ssh: to suppress displaying SSH packets for running tcpdump in
|
|
a remote SSH session
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Also some command line options are very useful to catch and print more informati
|
|
on in a packet, mostly interesting for digging into ICMPv6 packets:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset Quotes eld
|
|
\end_inset
|
|
|
|
-s 512
|
|
\begin_inset Quotes erd
|
|
\end_inset
|
|
|
|
: increase the snap length during capturing of a packet to 512 bytes
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset Quotes eld
|
|
\end_inset
|
|
|
|
-vv
|
|
\begin_inset Quotes erd
|
|
\end_inset
|
|
|
|
: really verbose output
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset Quotes eld
|
|
\end_inset
|
|
|
|
-n
|
|
\begin_inset Quotes erd
|
|
\end_inset
|
|
|
|
: don't resolve addresses to names, useful if reverse DNS resolving isn't
|
|
working proper
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 ping to
|
|
\size footnotesize
|
|
2001:0db8:100:f101::1
|
|
\size default
|
|
native over a local link
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcpdump: listening on eth0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100:f101:2e0:18ff:fe90:9205 > 2001:0db8:100:f101::1: icmp6: echo
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ request (len 64, hlim 64)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100:f101::1 > 2001:0db8:100:f101:2e0:18ff:fe90:9205: icmp6: echo
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ reply (len 64, hlim 64)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 ping to
|
|
\size footnotesize
|
|
2001:0db8:100::1
|
|
\size default
|
|
routed through an IPv6-in-IPv4-tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
1.2.3.4 and 5.6.7.8 are tunnel endpoints (all addresses are examples)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tcpdump -t -n -i ppp0 -s 512 -vv ip6 or proto ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcpdump: listening on ppp0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 2001:0db8:100::1: icmp6: echo request
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ (len 64, hlim 64) (DF) (ttl 64, id 0, len 124)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
5.6.7.8 > 1.2.3.4: 2001:0db8:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 64, hlim 61) (ttl 23, id 29887, len 124)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 2001:0db8:100::1: icmp6: echo request
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ (len 64, hlim 64) (DF) (ttl 64, id 0, len 124)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
5.6.7.8 > 1.2.3.4: 2001:0db8:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 64, hlim 61) (ttl 23, id 29919, len 124)
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
IPv6-ready programs
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Current distributions already contain the most needed IPv6 enabled client
|
|
and servers.
|
|
See first on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6+Linux-Status-Distribution"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-distributions.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
If still not included, you can check
|
|
\lang ngerman
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Current Status of IPv6 Support for Networking Applications"
|
|
target "http://www.deepspace6.net/docs/ipv6_status_page_apps.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\lang english
|
|
whether the program is already ported to IPv6 and usable with Linux.
|
|
For common used programs there are some hints available here later in this
|
|
document.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
IPv6-ready client programs (selection)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To run the following shown tests, it's required that your system is IPv6
|
|
enabled, and some examples show addresses which only can be reached if
|
|
a connection to the 6bone is available.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Checking DNS for resolving IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because of security updates in the last years every Domain Name System (DNS)
|
|
server should run newer software which already understands the (intermediate)
|
|
IPv6 address-type AAAA (the newer one named A6 isn't still common at the
|
|
moment because only supported using BIND9 and newer and also the non-existent
|
|
support of root domain IP6.ARPA).
|
|
A simple test whether the used system can resolve IPv6 addresses is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# host -t AAAA www.join.uni-muenster.de
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
and should show something like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
www.join.uni-muenster.de.
|
|
is an alias for tolot.join.uni-muenster.de.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tolot.join.uni-muenster.de.
|
|
has AAAA address
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:638:500:101:2e0:81ff:fe24:37c6
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6-ready telnet clients
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6-ready telnet clients are available.
|
|
A simple test can be done with
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
$ telnet 3ffe:400:100::1 80
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Trying 3ffe:400:100::1...
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Connected to 3ffe:400:100::1.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Escape character is '^]'.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
HEAD / HTTP/1.0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
HTTP/1.1 200 OK
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Date: Sun, 16 Dec 2001 16:07:21
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
GMT Server: Apache/2.0.28 (Unix)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Last-Modified: Wed, 01 Aug 2001 21:34:42 GMT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ETag: "3f02-a4d-b1b3e080"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Accept-Ranges: bytes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Content-Length: 2637
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Connection: close
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Content-Type: text/html; charset=ISO-8859-1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Connection closed by foreign host.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If the telnet client don't understand the IPv6 address and says something
|
|
like
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
cannot resolve hostname
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, then it's not IPv6-enabled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6-ready ssh clients
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
openssh
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Current versions of openssh are IPv6-ready.
|
|
Depending on configuring before compiling it has two behavior.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
--without-ipv4-default: the client tries an IPv6 connect first automatically
|
|
and fall back to IPv4 if not working
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
--with-ipv4-default: default connection is IPv4, IPv6 connection must be
|
|
force like following example shows
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
$ ssh -6 ::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
user@::1's password: ******
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
[user@ipv6host user]$
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If your ssh client doesn't understand the option
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
-6
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
then it's not IPv6-enabled, like most ssh version 1 packages.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ssh.com
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
SSH.com's SSH client and server is also IPv6 aware now and is free for all
|
|
Linux and FreeBSD machine regardless if used for personal or commercial
|
|
use.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6-ready web browsers
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A current status of IPv6 enabled web browsers is available at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Current Status of IPv6 Support for Networking Applications - HTTP"
|
|
target "http://www.deepspace6.net/docs/ipv6_status_page_apps.html#http"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Most of them have unresolved problems at the moment
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
If using an IPv4 only proxy in the settings, IPv6 requests will be sent
|
|
to the proxy, but the proxy will fail to understand the request and the
|
|
request fails.
|
|
Solution: update proxy software (see later).
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Automatic proxy settings (*.pac) cannot be extended to handle IPv6 requests
|
|
differently (e.g.
|
|
don't use proxy) because of their nature (written in Java-script and well
|
|
hard coded in source like to be seen in Mozilla source code).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Also older versions don't understand an URL with IPv6 encoded addresses
|
|
like
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://[2001:4dd0:f838:a006::6]/"
|
|
target "http://[2001:4dd0:f838:a006::6]/"
|
|
|
|
\end_inset
|
|
|
|
, IPv6 address of
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.ipv6.bieringer.de/"
|
|
target "http://www.ipv6.bieringer.de/"
|
|
|
|
\end_inset
|
|
|
|
(this given URLs only works with an IPv6-enabled browser!).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A short test is to try shown URL with a given browser and using no proxy.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
URLs for testing
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A good starting point for browsing using IPv6 is
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.kame.net/"
|
|
target "http://www.kame.net/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
If the turtle on this page is animated, the connection is via IPv6, otherwise
|
|
the turtle is static.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
IPv6-ready server programs
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In this part of this HOWTO, more client specific issues are mentioned.
|
|
Therefore hints for IPv6-ready servers like sshd, httpd, telnetd, etc.
|
|
are shown below in
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Hints for IPv6-enabled daemons"
|
|
reference "chapter-hints-daemons"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "faq-ipv6-ready-system-check"
|
|
|
|
\end_inset
|
|
|
|
FAQ (IPv6-ready system check)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using tools
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Q: Cannot ping6 to link-local addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Error message: "
|
|
\emph on
|
|
connect: Invalid argument
|
|
\emph default
|
|
"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Kernel doesn't know, which physical or virtual link you want to use to send
|
|
such ICMPv6 packets.
|
|
Therefore it displays this error message.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Solution: Specify interface like:
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ping6
|
|
\series bold
|
|
-I eth0
|
|
\series default
|
|
fe80::2e0:18ff:fe90:9205
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, see also
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "program ping6 usage"
|
|
reference "program-ping6"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Q: Cannot ping6 or traceroute6 as normal user
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Error message:
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
|
|
\emph on
|
|
icmp socket: Operation not permitted
|
|
\emph default
|
|
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
These utilities create special ICMPv6 packets and send them out.
|
|
This is done by using raw sockets in the kernel.
|
|
But raw sockets can only be used by the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
root
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
user.
|
|
Therefore normal users get such error message.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Solution: If it's really needed that all users should be able to use these
|
|
utilities, you can add the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
suid
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
bit using
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
chmod u+s /path/to/program
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, see also
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "program ping6 usage"
|
|
reference "program-ping6"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
If not all users should be able to, you can change the group of the program
|
|
to e.g.
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
wheel
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, add these power users to this group and remove the execution bit for other
|
|
users using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
chmod o-rwx /path/to/program
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
Or configure
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sudo
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
to enable your security policy.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-configuration-interface"
|
|
|
|
\end_inset
|
|
|
|
Configuring interfaces
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Different network devices
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
On a node, there exist different network devices.
|
|
They can be collected in classes
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Physically bounded, like eth0, tr0
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Virtually existing, like ppp0, tun0, tap0, sit0, isdn0, ippp0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Physically bounded
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Physically bounded interfaces like Ethernet or Token-Ring are normal ones
|
|
and need no special treatment.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Virtually bounded
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Virtually bounded interfaces always need special support
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6-in-IPv4 tunnel interfaces
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
These interfaces are normally named
|
|
\series bold
|
|
sit
|
|
\emph on
|
|
x
|
|
\series default
|
|
\emph default
|
|
.
|
|
The name
|
|
\emph on
|
|
sit
|
|
\emph default
|
|
is a shortcut for
|
|
\series bold
|
|
S
|
|
\series default
|
|
imple
|
|
\series bold
|
|
I
|
|
\series default
|
|
nternet
|
|
\series bold
|
|
T
|
|
\series default
|
|
ransition.
|
|
This device has the capability to encapsulate IPv6 packets into IPv4 ones
|
|
and tunnel them to a foreign endpoint.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\series bold
|
|
sit0
|
|
\series default
|
|
has a special meaning and cannot be used for dedicated tunnels.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
PPP interfaces
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
PPP interfaces get their IPv6 capability from an IPv6 enabled PPP daemon.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ISDN HDLC interfaces
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6 capability for HDLC with encapsulation
|
|
\series bold
|
|
ip
|
|
\series default
|
|
is already built-in in the kernel
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ISDN PPP interfaces
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ISDN PPP interfaces (ippp) aren't IPv6 enabled by kernel.
|
|
Also there are also no plans to do that because in kernel 2.5.+ they will
|
|
be replaced by a more generic ppp interface layer.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
SLIP + PLIP
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Like mentioned earlier, this interfaces don't support IPv6 transport (sending
|
|
is OK, but dispatching on receiving don't work).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Ether-tap device
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Ether-tap devices are IPv6-enabled and also stateless configured.
|
|
For use, the module
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ethertap
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
has to be loaded before.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
tun devices
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Currently not tested by me.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ATM
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
01/2002: Aren't currently supported by vanilla kernel, supported by USAGI
|
|
extension
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Others
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Did I forget an interface?...
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Bringing interfaces up/down
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Two methods can be used to bring interfaces up or down.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip link set dev <interface> up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip link set dev <interface> down
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip link set dev eth0 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip link set dev eth0 down
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig <interface> up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig <interface> down
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig eth0 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig eth0 down
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-configuration-address"
|
|
|
|
\end_inset
|
|
|
|
Configuring IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
There are different ways to configure an IPv6 address on an interface.
|
|
You can use use "ifconfig" or "ip".
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Displaying existing IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
First you should check, whether and which IPv6 addresses are already configured
|
|
(perhaps auto-magically during stateless auto-configuration).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr show dev <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example for a static configured host:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr show dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_ fast qlen 100
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 fe80::210:a4ff:fee3:9566/10 scope link
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 2001:0db8:0:f101::1/64 scope global
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 fec0:0:0:f101::1/64 scope site
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example for a host which is auto-configured
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Here you see some auto-magically configured IPv6 addresses and their lifetime.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr show dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 100
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 2002:d950:f5f8:f101:2e0:18ff:fe90:9205/64 scope global dynamic
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
valid_lft 16sec preferred_lft 6sec
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 3ffe:400:100:f101:2e0:18ff:fe90:9205/64 scope global dynamic
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
valid_lft 2591997sec preferred_lft 604797sec inet6 fe80::2e0:18ff:fe90:9205/10
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ scope link
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example (output filtered with grep to display only IPv6 addresses).
|
|
Here you see different IPv6 addresses with different scopes.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig eth0 |grep "inet6 addr:"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 addr: fe80::210:a4ff:fee3:9566/10 Scope:Link
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 addr: 2001:0db8:0:f101::1/64 Scope:Global
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 addr: fec0:0:0:f101::1/64 Scope:Site
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Add an IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Adding an IPv6 address is similar to the mechanism of "IP ALIAS" addresses
|
|
in Linux IPv4 addressed interfaces.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr add <ipv6address>/<prefixlength> dev <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr add 2001:0db8:0:f101::1/64 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig <interface> inet6 add <ipv6address>/<prefixlength>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Removing an IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Not so often needed, be carefully with removing non existent IPv6 address,
|
|
sometimes using older kernels it results in a crash.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr del <ipv6address>/<prefixlength> dev <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr del 2001:0db8:0:f101::1/64 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig <interface> inet6 del <ipv6address>/<prefixlength>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig eth0 inet6 del 2001:0db8:0:f101::1/64
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-configuration-route"
|
|
|
|
\end_inset
|
|
|
|
Configuring normal IPv6 routes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
If you want to leave your link and want to send packets in the world wide
|
|
IPv6-Internet, you need routing.
|
|
If there is already an IPv6 enabled router on your link, it's possible
|
|
enough to add IPv6 routes.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Displaying existing IPv6 routes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
First you should check, whether and which IPv6 addresses are already configured
|
|
(perhaps auto-magically during auto-configuration).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route show [dev <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route show dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:0:f101::/64 proto kernel metric 256 mtu 1500 advmss 1440
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fe80::/10 proto kernel metric 256 mtu 1500 advmss 1440
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ff00::/8 proto kernel metric 256 mtu 1500 advmss 1440
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default proto kernel metric 256 mtu 1500 advmss 1440
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Example (output is filtered for interface eth0).
|
|
Here you see different IPv6 routes for different addresses on a single
|
|
interface.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 |grep -w "eth0"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:0:f101 ::/64 :: UA 256 0 0 eth0 <- Interface route for global
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ address
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fe80::/10 :: UA 256 0 0 eth0 <- Interface route for link-local
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ address
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ff00::/8 :: UA 256 0 0 eth0 <- Interface route for all multicast
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ addresses
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::/0 :: UDA 256 0 0 eth0 <- Automatic default route
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Add an IPv6 route through a gateway
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Mostly needed to reach the outside with IPv6 using an IPv6-enabled router
|
|
on your link.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <ipv6network>/<prefixlength> via <ipv6address>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ [dev <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add default via 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <ipv6network>/<prefixlength> gw
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv6address> [dev <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
A device can be needed, too, if the IPv6 address of the gateway is a link
|
|
local one.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following shown example adds a default route through gateway
|
|
\family typewriter
|
|
\lang afrikaans
|
|
2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add default gw 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Removing an IPv6 route through a gateway
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Not so often needed manually, mostly done by network configure scripts on
|
|
shutdown (full or per interface)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <ipv6network>/<prefixlength> via <ipv6address>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ [dev <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del default via 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del <network>/<prefixlength> gw <ipv6address> [dev
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example for removing upper added route again:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del default gw 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Add an IPv6 route through an interface
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Not often needed, sometimes in cases of dedicated point-to-point links.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <ipv6network>/<prefixlength> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add default dev eth0 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Metric
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
1
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is used here to be compatible with the metric used by route, because the
|
|
default metric on using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
1024
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <ipv6network>/<prefixlength> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add default dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Removing an IPv6 route through an interface
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Not so often needed to use by hand, configuration scripts will use such
|
|
on shutdown.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <ipv6network>/<prefixlength> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del default dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del <network>/<prefixlength> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del default dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
FAQ for IPv6 routes
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Support of an IPv6 default route
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
One idea of IPv6 was a hierachical routing, therefore only less routing
|
|
entries are needed in routers.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There are some issues in current Linux kernels:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Clients (not routing any packet!)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Client can setup a default route like prefix
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
::/0
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, they also learn such route on autoconfiguration e.g.
|
|
using radvd on the link like following example shows:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 route show | grep ^default
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default via fe80::212:34ff:fe12:3450 dev eth0 proto kernel metric 1024 expires
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 29sec mtu 1500 advmss 1440
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Routers in case of packet forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Older Linux kernel (at least <= 2.4.17) don't support default routes.
|
|
You can set them up, but the route lookup fails when a packet should be
|
|
forwarded (normal intention of a router).
|
|
If you're still using such older kernel,
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
default routing
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
can be setup using the currently used global address prefix
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
2000::/3
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: take care about default routing without address filtering on edge
|
|
routers.
|
|
Otherwise unwanted multicast or site-local traffic can leave the edge.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-Neighbor-Discovery"
|
|
|
|
\end_inset
|
|
|
|
Neighbor Discovery
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Neighbor discovery was the IPv6 successor for the ARP (Address Resolution
|
|
Protocol) in IPv4.
|
|
You can retrieve information about the current neighbors, in addition you
|
|
can set and delete entries.
|
|
The kernel keeps tracking of successful neighbor detection (like ARP in
|
|
IPv4).
|
|
You can dig into the learnt table using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Displaying neighbors using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With following command you can display the learnt or configured IPv6 neighbors
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 neigh show [dev <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The following example shows one neighbor, which is a reachable router
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 neigh show
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fe80::201:23ff:fe45:6789 dev eth0 lladdr 00:01:23:45:67:89 router nud reachable
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Manipulating neighbors table using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Manually add an entry
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With following command you are able to manually add an entry
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 neigh add <IPv6 address> lladdr <link-layer address> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 neigh add fec0::1 lladdr 02:01:02:03:04:05 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Manually delete an entry
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Like adding also an entry can be deleted:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 neigh del <IPv6 address> lladdr <link-layer address> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 neigh del fec0::1 lladdr 02:01:02:03:04:05 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
More advanced settings
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The tool
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is less documentated, but very strong.
|
|
See online
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
help
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
for more:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 neigh help
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Usage: ip neigh { add | del | change | replace } { ADDR [ lladdr LLADDR
|
|
]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
[ nud { permanent | noarp | stale | reachable } ]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| proxy ADDR } [ dev DEV ]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ip neigh {show|flush} [ to PREFIX ] [ dev DEV ] [ nud STATE ]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Looks like some options are only for IPv4...if you can contribute information
|
|
about flags and advanced usage, pls.
|
|
send.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-configuring-ipv6-in-ipv4-tunnels"
|
|
|
|
\end_inset
|
|
|
|
Configuring IPv6-in-IPv4 tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
If you want to leave your link and you have no IPv6 capable network around
|
|
you, you need IPv6-in-IPv4 tunneling to reach the world wide IPv6-Internet.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
There are some kind of tunnel mechanism and also some possibilities to setup
|
|
tunnels.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Types of tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There are more than one possibility to tunnel IPv6 packets over IPv4-only
|
|
links.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Static point-to-point tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
A point-to-point tunnel is a dedicated tunnel to an endpoint, which knows
|
|
about your IPv6 network (for backward routing) and the IPv4 address of
|
|
your tunnel endpoint and defined in
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4213 / Basic Transition Mechanisms for IPv6 Hosts and Routers"
|
|
target "http://www.faqs.org/rfcs/rfc4213.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Requirements:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
IPv4 address of your local tunnel endpoint must be static, global unique
|
|
and reachable from the foreign tunnel endpoint
|
|
\end_layout
|
|
|
|
\begin_deeper
|
|
\begin_layout Itemize
|
|
If no static IPv4 address is available, the tunnel provider must support
|
|
authentication of the dynamic IPv4 address, like
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SixXS / AICCU"
|
|
target "http://www.sixxs.net/"
|
|
|
|
\end_inset
|
|
|
|
(3740/udp) or
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "gogo6"
|
|
target "http://gogo6.com/"
|
|
|
|
\end_inset
|
|
|
|
(3653/udp).
|
|
\end_layout
|
|
|
|
\end_deeper
|
|
\begin_layout Itemize
|
|
\align left
|
|
A global IPv6 prefix assigned to you
|
|
\end_layout
|
|
|
|
\begin_deeper
|
|
\begin_layout Itemize
|
|
It is also possible that additional IPv6 networks are routed through this
|
|
tunnel.
|
|
\end_layout
|
|
|
|
\end_deeper
|
|
\begin_layout Itemize
|
|
\align left
|
|
A foreign tunnel endpoint which is capable to route your IPv6 prefix to
|
|
your local tunnel endpoint (mostly remote manual configuration required)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Automatically tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Automatic tunneling occurs, when a node directly connects another node gotten
|
|
the IPv4 address of the other node before.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "tunneling-6to4"
|
|
|
|
\end_inset
|
|
|
|
6to4-Tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
6to4 tunneling (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds"
|
|
target "http://www.faqs.org/rfcs/rfc3056.html"
|
|
|
|
\end_inset
|
|
|
|
) uses a simple mechanism to create automatic tunnels.
|
|
Each node with a global unique IPv4 address is able to be a 6to4 tunnel
|
|
endpoint (if no IPv4 firewall prohibits traffic).
|
|
6to4 tunneling is mostly not a one-to-one tunnel.
|
|
This case of tunneling can be divided into upstream and downstream tunneling.
|
|
Also, a special IPv6 address indicates that this node will use 6to4 tunneling
|
|
for connecting the world-wide IPv6 network
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Generation of 6to4 prefix
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The 6to4 address is defined like following (schema is taken from
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds"
|
|
target "http://www.faqs.org/rfcs/rfc3056.html"
|
|
|
|
\end_inset
|
|
|
|
):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| 3+13 | 32 | 16 | 64 bits |
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+---+------+-----------+--------+--------------------------------+
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| FP+TLA | V4ADDR | SLA ID | Interface ID |
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| 0x2002 | | | |
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+---+------+-----------+--------+--------------------------------+
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
FP and TLA together (16 bits) have the value 0x2002.
|
|
V4ADDR is the node's global unique IPv4 address (in hexadecimal notation).
|
|
SLA is the subnet identifier (65536 local subnets possible) and are usable
|
|
to represent your local network structure.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For gateways, such prefix is generated by normally using SLA
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0000
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and suffix
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
::1
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(not a must, can be an arbitrary one with local-scope) and assigned to
|
|
the 6to4 tunnel interface.
|
|
Note that Microsoft Windows uses V4ADDR also for suffix.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
6to4 upstream tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The node has to know to which foreign tunnel endpoint its in IPv4 packed
|
|
IPv6 packets should be send to.
|
|
In
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
early
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
days of 6to4 tunneling, dedicated upstream accepting routers were defined.
|
|
See
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NSayer's 6to4 information"
|
|
target "http://www.kfu.com/~nsayer/6to4/"
|
|
|
|
\end_inset
|
|
|
|
for a list of routers.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nowadays, 6to4 upstream routers can be found auto-magically using the anycast
|
|
address 192.88.99.1.
|
|
In the background routing protocols handle this, see
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3068 / An Anycast Prefix for 6to4 Relay Routers"
|
|
target "http://www.faqs.org/rfcs/rfc3068.html"
|
|
|
|
\end_inset
|
|
|
|
for details.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
6to4 downstream tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The downstream (6bone -> your 6to4 enabled node) is not really fix and can
|
|
vary from foreign host which originated packets were send to.
|
|
There exist two possibilities:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Foreign host uses 6to4 and sends packet direct back to your node (see below)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Foreign host sends packets back to the world-wide IPv6 network and depending
|
|
on the dynamic routing a relay router create a automatic tunnel back to
|
|
your node.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Possible 6to4 traffic
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
from 6to4 to 6to4: is normally directly tunneled between the both 6to4 enabled
|
|
hosts
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
from 6to4 to non-6to4: is sent via upstream tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
non-6to4 to 6to4: is sent via downstream tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
UDP encapsulated IPv6 tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
UDP encapsulated IPv6 tunneling is usally used if no global IPv4 address
|
|
is available on the internal endpoint, but using Network Adress Translation
|
|
(NAT) it can still reach related endpoints using UDP ports described below.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Teredo Tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4380 / Teredo: Tunneling IPv6 over UDP through Network Address Translations"
|
|
target "http://www.faqs.org/rfcs/rfc4380.html"
|
|
|
|
\end_inset
|
|
|
|
describes tunneling of IPv6 packets via IPv4 UDP bubbles, see also
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Wikipedia / Teredo"
|
|
target "http://de.wikipedia.org/wiki/Teredo"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
It uses usually 3544/udp.
|
|
Linux client is named
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "miredo"
|
|
target "http://www.remlab.net/miredo/"
|
|
|
|
\end_inset
|
|
|
|
and usable out-of-the-box.
|
|
This tunnel method can only connect a single client to the global IPv6
|
|
network..
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
AYIYA Tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Tunnel provider
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SixXS"
|
|
target "http://www.sixxs.net/"
|
|
|
|
\end_inset
|
|
|
|
has also IPv6-in-UDP-in-IPv4 (5072/udp) capability, for using it, the AYIYA
|
|
mode must be enabled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gogo6 Tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Tunnel provider
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "gogo6"
|
|
target "http://gogo6.com/"
|
|
|
|
\end_inset
|
|
|
|
has also IPv6-in-UDP-in-IPv4 (3653/udp) capability, for using it, the v6udpv4
|
|
mode must be enabled.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Displaying existing tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel show [<device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel show
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sit0: ipv6/ip remote any local any ttl 64 nopmtudisc
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sit1: ipv6/ip remote 195.226.187.50 local any ttl 64
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example (output is filtered to display only tunnels through virtual interface
|
|
sit0):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 | grep "
|
|
\backslash
|
|
Wsit0
|
|
\backslash
|
|
W*$"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::/96 :: U 256 2 0 sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2002::/16 :: UA 256 0 0 sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2000::/3 ::193.113.58.75 UG 1 0 0 sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fe80::/10 :: UA 256 0 0 sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ff00::/8 :: UA 256 0 0 sit0
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "conf-ipv6-in-ipv4-point-to-point-tunnels"
|
|
|
|
\end_inset
|
|
|
|
Setup of point-to-point tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
There are 3 possibilities to add or remove point-to-point tunnels.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A good additional information about tunnel setup using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Configuring tunnels with iproute2 (article)"
|
|
target "http://www.deepspace6.net/docs/iproute2tunnel-en.html"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/docs/iproute2tunnel-en.html"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Add point-to-point tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Common method at the moment for a small amount of tunnels.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage for creating a tunnel device (but it's not up afterward, also a TTL
|
|
must be specified because the default value is 0).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel add <device> mode sit ttl <ttldefault> remote
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv4addressofforeigntunnel> local <ipv4addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel add sit1 mode sit ttl <ttldefault> remote
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv4addressofforeigntunnel1> local <ipv4addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev sit1 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <prefixtoroute1> dev sit1 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel add sit2 mode sit ttl <ttldefault>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv4addressofforeigntunnel2> local <ipv4addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev sit2 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <prefixtoroute2> dev sit2 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel add sit3 mode sit ttl <ttldefault>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv4addressofforeigntunnel3> local <ipv4addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev sit3 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <prefixtoroute3> dev sit3 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "ifconfig" and "route" (deprecated)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
This not very recommended way to add a tunnel because it's a little bit
|
|
strange.
|
|
No problem if adding only one, but if you setup more than one, you cannot
|
|
easy shutdown the first ones and leave the others running.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 tunnel <ipv4addressofforeigntunnel1>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit1 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <prefixtoroute1> dev sit1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 tunnel <ipv4addressofforeigntunnel2>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit2 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <prefixtoroute2> dev sit2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 tunnel <ipv4addressofforeigntunnel3>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit3 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <prefixtoroute3> dev sit3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Important: DON'T USE THIS, because this setup implicit enable "automatic
|
|
tunneling" from anywhere in the Internet, this is a risk, and it should
|
|
not be advocated.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "route" only
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
It's also possible to setup tunnels in Non Broadcast Multiple Access (NBMA)
|
|
style, it's a easy way to add many tunnels at once.
|
|
But none of the tunnel can be numbered (which is a not required feature).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <prefixtoroute1> gw
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ::<ipv4addressofforeigntunnel1> dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <prefixtoroute2> gw
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ::<ipv4addressofforeigntunnel2> dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <prefixtoroute3> gw
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ::<ipv4addressofforeigntunnel3> dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Important: DON'T USE THIS, because this setup implicit enable "automatic
|
|
tunneling" from anywhere in the Internet, this is a risk, and it should
|
|
not be advocated.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Removing point-to-point tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Manually not so often needed, but used by scripts for clean shutdown or
|
|
restart of IPv6 configuration.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage for removing a tunnel device:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel del <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <prefixtoroute1> dev sit1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set sit1 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel del sit1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <prefixtoroute2> dev sit2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set sit2 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel del sit2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <prefixtoroute3> dev sit3
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set sit3 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel del sit3
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "ifconfig" and "route" (deprecated because not very funny)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Not only the creation is strange, the shutdown also...you have to remove the
|
|
tunnels in backorder, means the latest created must be removed first.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del <prefixtoroute3> dev sit3
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit3 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del <prefixtoroute2> dev sit2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit2 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add <prefixtoroute1> dev sit1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit1 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This is like removing normal IPv6 routes.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del <prefixtoroute1> gw
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ::<ipv4addressofforeigntunnel1> dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del <prefixtoroute2> gw
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ::<ipv4addressofforeigntunnel2> dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del <prefixtoroute3> gw
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ::<ipv4addressofforeigntunnel3> dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 down
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Numbered point-to-point tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Sometimes it's needed to configure a point-to-point tunnel with IPv6 addresses
|
|
like in IPv4 today.
|
|
This is only possible with the first (ifconfig+route - deprecated) and
|
|
third (ip+route) tunnel setup.
|
|
In such cases, you can add the IPv6 address to the tunnel interface like
|
|
shown on interface configuration.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "configuring-ipv6to4-tunnels"
|
|
|
|
\end_inset
|
|
|
|
Setup of 6to4 tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Pay attention that the support of 6to4 tunnels currently lacks on vanilla
|
|
kernel series 2.2.x (see
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "systemcheck/kernel"
|
|
reference "systemcheck-kernel"
|
|
|
|
\end_inset
|
|
|
|
for more information).
|
|
Also note that that the prefix length for a 6to4 address is 16 because
|
|
of from network point of view, all other 6to4 enabled hosts are on the
|
|
same layer 2.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Add a 6to4 tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
First, you have to calculate your 6to4 prefix using your local assigned
|
|
global routable IPv4 address (if your host has no global routable IPv4
|
|
address, in special cases NAT on border gateways is possible):
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Assuming your IPv4 address is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
the generated 6to4 prefix will be
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2002:0102:0304::
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Local 6to4 gateways should (but it's not a must, you can choose an arbitrary
|
|
suffix with local-scope, if you feel better) always assigned the suffix
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
::1
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, therefore your local 6to4 address will be
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2002:0102:0304::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Use e.g.
|
|
following for automatic generation:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ipv4="1.2.3.4"; printf "2002:%02x%02x:%02x%02x::1" `echo $ipv4 | tr "." " "`
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There are two ways possible to setup 6to4 tunneling now.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "ip" and a dedicated tunnel device
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This is now the recommended way (a TTL must be specified because the default
|
|
value is 0).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Create a new tunnel device
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel add tun6to4 mode sit ttl <ttldefault> remote any local
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <localipv4address>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Bring interface up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev tun6to4 up
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Add local 6to4 address to interface (note: prefix length 16 is important!)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr add <local6to4address>/16 dev tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Add (default) route to the global IPv6 network using the all-6to4-routers
|
|
IPv4 anycast address
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add default via ::192.88.99.1 dev tun6to4 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
It was reported that some versions of
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(e.g.
|
|
SuSE Linux 9.0) don't support IPv4-compatible IPv6 addresses for gateways,
|
|
in this case the related IPv6 address has to be used:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add default via 2002:c058:6301::1 dev tun6to4 metric
|
|
1
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "ifconfig" and "route" and generic tunnel device
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sit0
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(deprecated)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This is now deprecated because using the generic tunnel device sit0 doesn't
|
|
let specify filtering per device.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Bring generic tunnel interface sit0 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 up
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Add local 6to4 address to interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 add <local6to4address>/16
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Add (default) route to the global IPv6 network using the all-6to4-relays
|
|
IPv4 anycast address
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 add default gw ::192.88.99.1 dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Remove a 6to4 tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using "ip" and a dedicated tunnel device
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remove all routes through this dedicated tunnel device
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route flush dev tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Shut down interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev tun6to4 down
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remove created tunnel device
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel del tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ifconfig
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
route
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and generic tunnel device
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sit0
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(deprecated)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remove (default) route through the 6to4 tunnel interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/route -A inet6 del default gw ::192.88.99.1 dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remove local 6to4 address to interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 del <local6to4address>/16
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Shut down generic tunnel device (take care about this, perhaps it's still
|
|
in use...)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ifconfig sit0 down
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-configuring-ipv4-in-ipv6-tunnels"
|
|
|
|
\end_inset
|
|
|
|
Configuring IPv4-in-IPv6 tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 2473 / Generic Packet Tunneling in IPv6 Specification"
|
|
target "http://www.faqs.org/rfcs/rfc2473.html"
|
|
|
|
\end_inset
|
|
|
|
specifies mechanisms to tunnel several different packet types over IPv6
|
|
including IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
NOTE: Support for IPv4-in-IPv6 tunnel is available only since kernel version
|
|
2.6.22.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Displaying existing tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel show [<device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel show mode any
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ip6tnl0: ipv6/ipv6 remote :: local :: encaplimit 0 hoplimit 0 tclass 0x00
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ flowlabel 0x00000 (flowinfo 0x00000000)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ip6tnl1: ip/ipv6 remote fd00:0:0:2::a local fd00:0:0:2::1 dev eth1 encaplimit
|
|
4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ hoplimit 64 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
NOTE: If you don't include "mode any", only IPv6-in-IPv6 tunnels are displayed.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Setup of point-to-point tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage for creating a 4over6 tunnel device (but it's not up afterward)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip tunnel add <device> mode ip4ip6 remote <ipv6addressofforeigntunnel>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ local <ipv6addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel add ip6tnl1 mode ip4ip6 remote
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv6addressofforeigntunnel1> local <ipv6addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev ip6tnl1 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <prefixtoroute1> dev ip6tnl1 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel add ip6tnl2 mode ip4ip6 remote
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv6addressofforeigntunnel2> local <ipv6addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev ip6tnl2 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <prefixtoroute2> dev ip6tnl2 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel add ip6tnl3 mode ip4ip6 remote
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ <ipv6addressofforeigntunnel3> local <ipv6addresslocal>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set dev ip6tnl3 up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add <prefixtoroute3> dev ip6tnl3 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Removing point-to-point tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage for removing a tunnel device:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel del <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage (generic example for three tunnels):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <prefixtoroute1> dev ip6tnl1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set ip6tnl1 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel del ip6tnl1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <prefixtoroute2> dev ip6tnl2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set ip6tnl2 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel del ip6tnl2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route del <prefixtoroute3> dev ip6tnl3
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip link set ip6tnl3 down
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 tunnel del ip6tnl3
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-kernel-settings"
|
|
|
|
\end_inset
|
|
|
|
Kernel settings in /proc-filesystem
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-filesystem"
|
|
|
|
\end_inset
|
|
|
|
Note: the source of this section is mostly the file
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip-sysctl.txt
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
which is included in current kernel sources in directory
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
Documentation/networking
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
Credits to Pekka Savola for maintaining the IPv6-related part in this file.
|
|
Also some text is more or less copied & pasted into this document.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
How to access the /proc-filesystem
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
cat
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
echo
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
cat
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
echo
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is the simplest way to access the /proc filesystem, but some requirements
|
|
are needed for that
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
The /proc-filesystem had to be enabled in kernel, means on compiling following
|
|
switch has to be set
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CONFIG_PROC_FS=y
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
The /proc-filesystem was mounted before, which can be tested using
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# mount | grep "type proc"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
none on /proc type proc (rw)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
You need read and sometimes also write access (normally root only) to the
|
|
/proc-filesystem
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Normally, only entries in /proc/sys/* are writable, the others are readonly
|
|
and for information retrieving only.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Retrieving a value
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The value of an entry can be retrieved using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
cat
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# cat /proc/sys/net/ipv6/conf/all/forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Setting a value
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A new value can be set (if entry is writable) using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
echo
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# echo "1" >/proc/sys/net/ipv6/conf/all/forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sysctl
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Using the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sysctl
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
program to access the kernel switches is a modern method today.
|
|
You can use it also, if the /proc-filesystem isn't mounted.
|
|
But you have only access to /proc/sys/*!
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The program
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sysctl
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is included in package
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
procps
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(on Red Hat Linux systems).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
The sysctl-interface had to be enabled in kernel, means on compiling following
|
|
switch has to be set
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CONFIG_SYSCTL=y
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Retrieving a value
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The value of an entry can be retrieved now:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# sysctl net.ipv6.conf.all.forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
net.ipv6.conf.all.forwarding = 0
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Setting a value
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A new value can be set (if entry is writable):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# sysctl -w net.ipv6.conf.all.forwarding=1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
net.ipv6.conf.all.forwarding = 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: Don't use spaces around the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
=
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
on setting values.
|
|
Also on multiple values per line, quote them like e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# sysctl -w net.ipv4.ip_local_port_range="32768 61000"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
net.ipv4.ip_local_port_range = 32768 61000
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Additionals
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: There are sysctl versions in the wild which displaying
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
/
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
instead of the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
.
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For more details take a look into sysctl's manpage.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Hint: for digging fast into the settings, use the option
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
-a
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(display all entries) in conjunction with
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
grep
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Values found in /proc-filesystems
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There are several formats seen in /proc-filesystem:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
BOOLEAN: simple a
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(false) or a
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
1
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(true)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
INTEGER: an integer value, can be unsigned, too
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
more sophisticated lines with several values: sometimes a header line is
|
|
displayed also, if not, have a look into the kernel source to retrieve
|
|
information about the meaning of each value...
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-sys-net-ipv6"
|
|
|
|
\end_inset
|
|
|
|
Entries in /proc/sys/net/ipv6/
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
conf/default/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change the interface-specific default settings.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
conf/all/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change all the interface-specific settings.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exception:
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
conf/all/forwarding
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
has a different meaning here
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
conf/all/forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This enables global IPv6 forwarding between all interfaces.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In IPv6 you can't control forwarding per device, forwarding control has
|
|
to be done using IPv6-netfilter (controlled with ip6tables) rulesets and
|
|
specify input and output devices (see
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Firewalling/Netfilter6"
|
|
reference "firewalling-netfilter6"
|
|
|
|
\end_inset
|
|
|
|
for more).
|
|
This is different to IPv4, where you are able to control forwarding per
|
|
device (decision is made on interface where packet came in).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This also sets all interfaces' Host/Router setting 'forwarding' to the specified
|
|
value.
|
|
See below for details.
|
|
This referred to as global forwarding.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If this value is 0, no IPv6 forwarding is enabled, packets never leave another
|
|
interface, neither physical nor logical like e.g.
|
|
tunnels.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
conf/interface/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change special settings per interface.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The functional behaviour for certain settings is different depending on
|
|
whether local forwarding is enabled or not.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
accept_ra
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Functional default: enabled if local forwarding is disabled.
|
|
disabled if local forwarding is enabled.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Accept Router Advertisements, and autoconfigure this interface with received
|
|
data.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
accept_redirects
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Functional default: enabled if local forwarding is disabled.
|
|
disabled if local forwarding is enabled.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Accept Redirects sent by an IPv6 router.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
autoconf
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Functional default: enabled if accept_ra_pinfo is enabled.
|
|
disabled if accept_ra_pinfo is disabled.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Autoconfigure addresses using prefix information from router advertisements.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dad_transmits
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The amount of Duplicate Address Detection probes to send.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: FALSE if global forwarding is disabled (default), otherwise TRUE
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Configure interface-specific Host/Router behaviour.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: It is recommended to have the same setting on all interfaces; mixed
|
|
router/host scenarios are rather uncommon.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Value FALSE: By default, Host behaviour is assumed.
|
|
This means:
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IsRouter flag is not set in Neighbour Advertisements.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Router Solicitations are being sent when necessary.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
If accept_ra is TRUE (default), accept Router Advertisements (and do autoconfigu
|
|
ration).
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
If accept_redirects is TRUE (default), accept Redirects.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Value TRUE: If local forwarding is enabled, Router behaviour is assumed.
|
|
This means exactly the reverse from the above:
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IsRouter flag is set in Neighbour Advertisements.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Router Solicitations are not sent.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Router Advertisements are ignored.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Redirects are ignored.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
hop_limit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 64
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Default Hop Limit to set.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
mtu
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1280 (IPv6 required minimum)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Default Maximum Transfer Unit
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
router_solicitation_delay
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Number of seconds to wait after interface is brought up before sending Router
|
|
Solicitations.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
router_solicitation_interval
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Number of seconds to wait between Router Solicitations.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
router_solicitations
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Number of Router Solicitations to send until assuming no routers are present.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
neigh/default/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change default settings for neighbor detection and some special global interval
|
|
and threshold values:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh1
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 128
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh2
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 512
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh3
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1024
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Tuning parameter for neighbour table size.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Increase this value if you have a lot of interfaces and problem with routes
|
|
start to act mysteriously and fail.
|
|
Or if a running
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Zebra (routing daemon)"
|
|
target "http://www.zebra.org/"
|
|
|
|
\end_inset
|
|
|
|
reports:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ZEBRA: netlink-listen error: No buffer space available, type=RTM_NEWROUTE(24),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ seq=426, pid=0
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_interval
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 30
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
neigh/interface/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change special settings per interface for neighbor detection.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
anycast_delay
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 100
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_stale_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 60
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
proxy_qlen
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 64
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
unres_qlen
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
app_solicit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
locktime
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
retrans_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 100
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
base_reachable_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 30
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
mcast_solicit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ucast_solicit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
delay_first_probe_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 5
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
proxy_delay
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 80
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
route/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change global settings for routing.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
flush
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Removed in newer kernel releases - more to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_interval
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 30
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1024
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
mtu_expires
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 600
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_elasticity
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_min_interval
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 5
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_timeout
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 60
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
min_adv_mss
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 12
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
max_size
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 4096
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-sys-net-ipv4"
|
|
|
|
\end_inset
|
|
|
|
IPv6-related entries in /proc/sys/net/ipv4/
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
At the moment (and this will be until IPv4 is completly converted to an
|
|
independend kernel module) some switches are also used here for IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ip_*
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ip_local_port_range
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This control setting is used by IPv6 also.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
tcp_*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This control settings are used by IPv6 also.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
icmp_*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This control settings are not used by IPv6.
|
|
To enable ICMPv6 rate limiting (which is very recommended because of the
|
|
capability of ICMPv6 storms) netfilter-v6 rules must be used.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
others
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Unknown, but probably not used by IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-net"
|
|
|
|
\end_inset
|
|
|
|
IPv6-related entries in /proc/net/
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In /proc/net there are several read-only entries available.
|
|
You cannot retrieve information using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sysctl
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
here, so use e.g.
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
cat
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
if_inet6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: One line per addresss containing multiple values
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Here all configured IPv6 addresses are shown in a special format.
|
|
The example displays for loopback interface only.
|
|
The meaning is shown below (see
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
net/ipv6/addrconf.c
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
for more).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# cat /proc/net/if_inet6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
00000000000000000000000000000001 01 80 10 80 lo
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+------------------------------+ ++ ++ ++ ++ ++
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| | | | | |
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1 2 3 4 5 6
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IPv6 address displayed in 32 hexadecimal chars without colons as separator
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Netlink device number (interface index) in hexadecimal (see
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip addr
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, too)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Prefix length in hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Scope value (see kernel source
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
include/net/ipv6.h
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
net/ipv6/addrconf.c
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
for more)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Interface flags (see
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
include/linux/rtnetlink.h
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
net/ipv6/addrconf.c
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
for more)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Device name
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ipv6_route
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: One line per route containing multiple values
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Here all configured IPv6 routes are shown in a special format.
|
|
The example displays for loopback interface only.
|
|
The meaning is shown below (see
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
net/ipv6/route.c
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
for more).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# cat /proc/net/ipv6_route
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
00000000000000000000000000000000 00 00000000000000000000000000000000 00
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+------------------------------+ ++ +------------------------------+ ++
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| | | |
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1 2 3 4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 00000000000000000000000000000000 ffffffff 00000001 00000001 00200200 lo
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ +------------------------------+ +------+ +------+ +------+ +------+ ++
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ | | | | | |
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 5 6 7 8 9 10
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IPv6 destination network displayed in 32 hexadecimal chars without colons
|
|
as separator
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IPv6 destination prefix length in hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IPv6 source network displayed in 32 hexadecimal chars without colons as
|
|
separator
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IPv6 source prefix length in hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
IPv6 next hop displayed in 32 hexadecimal chars without colons as separator
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Metric in hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Reference counter
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Use counter
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Flags
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Device name
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
sockstat6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: One line per protocol with description and value
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Statistics about used IPv6 sockets.
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# cat /proc/net/sockstat6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
TCP6: inuse 7
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
UDP6: inuse 2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
RAW6: inuse 1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
FRAG6: inuse 0 memory 0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
tcp6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
udp6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
igmp6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
raw6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ip6_flowlabel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
rt6_stats
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To be filled.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
snmp6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Type: One line per SNMP description and value
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
SNMP statistics, can be retrieved via SNMP server and related MIB table
|
|
by network management software.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ip6_tables_names
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Available netfilter6 tables
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "netlink"
|
|
|
|
\end_inset
|
|
|
|
Netlink-Interface to kernel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To be filled...I have no experience with that...
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "resolver"
|
|
|
|
\end_inset
|
|
|
|
Address Resolver
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Name to IPv4 or IPv6 address resolving is usually done using a libc resolver
|
|
library.
|
|
There are some issues known using the function
|
|
\emph on
|
|
getaddrinfo
|
|
\emph default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More info can be found at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux & IPv6: getaddrinfo and search domains - Research"
|
|
target "http://www.bieringer.de/linux/IPv6/getaddrinfo/"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3484 on Linux"
|
|
target "http://people.redhat.com/drepper/linux-rfc3484.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset VSpace defskip
|
|
\end_inset
|
|
|
|
More to be filled later...
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "network-debugging"
|
|
|
|
\end_inset
|
|
|
|
Network debugging
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Server socket binding
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
netstat
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
for server socket binding check
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
It's always interesting which server sockets are currently active on a node.
|
|
Using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
netstat
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is a short way to get such information:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Used options: -nlptu
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# netstat -nlptu
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Active Internet connections (only servers)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Proto Recv-Q Send-Q Local Address Foreign Address State
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ PID/Program name
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1258/rpc.statd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 0.0.0.0:32769 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1502/rpc.mountd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 0.0.0.0:515 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 22433/lpd Waiting
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 1.2.3.1:139 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1746/smbd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1230/portmap
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 3551/X
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 1.2.3.1:8081 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 18735/junkbuster
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 1.2.3.1:3128 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 18822/(squid)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 30734/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 ::ffff:1.2.3.1:993 :::* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 6742/xinetd-ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 :::13 :::* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 6742/xinetd-ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 ::ffff:1.2.3.1:143 :::* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 6742/xinetd-ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 :::53 :::* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 30734/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 :::22 :::* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1410/sshd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 :::6010 :::* LISTEN
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 13237/sshd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:32768 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1258/rpc.statd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:2049 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ -
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:32770 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1502/rpc.mountd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:32771 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ -
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 1.2.3.1:137 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1751/nmbd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:137 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1751/nmbd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 1.2.3.1:138 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1751/nmbd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:138 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1751/nmbd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:33044 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 30734/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 1.2.3.1:53 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 30734/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 127.0.0.1:53 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 30734/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:67 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1530/dhcpd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:67 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1530/dhcpd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:32858 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 18822/(squid)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:4827 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 18822/(squid)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:111 0.0.0.0:*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 1230/portmap
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 :::53 :::*
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 30734/named
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "examples-tcpdump"
|
|
|
|
\end_inset
|
|
|
|
Examples for tcpdump packet dumps
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Here some examples of captured packets are shown, perhaps useful for your
|
|
own debugging...
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
...more coming next...
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Router discovery
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Router advertisement
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
15:43:49.484751 fe80::212:34ff:fe12:3450 > ff02::1: icmp6: router
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ advertisement(chlim=64, router_ltime=30, reachable_time=0,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ retrans_time=0)(prefix info: AR valid_ltime=30, preffered_ltime=20,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ prefix=2002:0102:0304:1::/64)(prefix info: LAR valid_ltime=2592000,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ preffered_ltime=604800, prefix=2001:0db8:0:1::/64)(src lladdr:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 0:12:34:12:34:50) (len 88, hlim 255)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Router with link-local address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
fe80::212:34ff:fe12:3450
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
send an advertisement to the all-node-on-link multicast address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ff02::1
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
containing two prefixes
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
2002:0102:0304:1::/64
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(lifetime 30 s) and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
2001:0db8:0:1::/64
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(lifetime 2592000 s) including its own layer 2 MAC address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0:12:34:12:34:50
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Router solicitation
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
15:44:21.152646 fe80::212:34ff:fe12:3456 > ff02::2: icmp6: router solicitation
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ (src lladdr: 0:12:34:12:34:56) (len 16, hlim 255)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Node with link-local address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
fe80::212:34ff:fe12:3456
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and layer 2 MAC address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0:12:34:12:34:56
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is looking for a router on-link, therefore sending this solicitation to
|
|
the all-router-on-link multicast address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ff02::2
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Neighbor discovery
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Neighbor discovery solicitation for duplicate address detection
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following packets are sent by a node with layer 2 MAC address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0:12:34:12:34:56
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
during autoconfiguration to check whether a potential address is already
|
|
used by another node on the link sending this to the solicited-node link-local
|
|
multicast address.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Node wants to configure its link-local address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
fe80::212:34ff:fe12:3456
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, checks for duplicate now
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
15:44:17.712338 :: > ff02::1:ff12:3456: icmp6: neighbor sol: who has
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ fe80::212:34ff:fe12:3456(src lladdr: 0:12:34:12:34:56) (len 32, hlim 255)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Node wants to configure its global address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
2002:0102:0304:1:212:34ff:fe12:3456
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(after receiving advertisement shown above), checks for duplicate now
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
15:44:21.905596 :: > ff02::1:ff12:3456: icmp6: neighbor sol: who has
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2002:0102:0304:1:212:34ff:fe12:3456(src lladdr: 0:12:34:12:34:56) (len
|
|
32,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ hlim 255)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Node wants to configure its global address
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
2001:0db8:0:1:212:34ff:fe12:3456
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(after receiving advertisement shown above), checks for duplicate now
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
15:44:22.304028 :: > ff02::1:ff12:3456: icmp6: neighbor sol: who has
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:0db8:0:1:212:34ff:fe12:3456(src lladdr: 0:12:34:12:34:56) (len 32,
|
|
hlim
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 255)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Neighbor discovery solicitation for looking for host or gateway
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Node wants to send packages to
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
2001:0db8:0:1::10
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
but has no layer 2 MAC address to send packet, so send solicitation now
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
13:07:47.664538 2002:0102:0304:1:2e0:18ff:fe90:9205 > ff02::1:ff00:10: icmp6:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ neighbor sol: who has 2001:0db8:0:1::10(src lladdr: 0:e0:18:90:92:5) (len
|
|
32,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ hlim 255)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Node looks for
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
fe80::10
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
now
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
13:11:20.870070 fe80::2e0:18ff:fe90:9205 > ff02::1:ff00:10: icmp6: neighbor
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ sol: who has fe80::10(src lladdr: 0:e0:18:90:92:5) (len 32, hlim 255)
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-support-persistent-configuration"
|
|
|
|
\end_inset
|
|
|
|
Support for persistent IPv6 configuration in Linux distributions
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Some Linux distribution contain already support of a persistent IPv6 configurati
|
|
on using existing or new configuration and script files and some hook in
|
|
the IPv4 script files.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Red Hat Linux and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
clones
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Since starting writing the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
it was my intention to enable a persistent IPv6 configuration which catch
|
|
most of the wished cases like host-only, router-only, dual-homed-host,
|
|
router with second stub network, normal tunnels, 6to4 tunnels, and so on.
|
|
Nowadays there exists a set of configuration and script files which do
|
|
the job very well (never heard about real problems, but I don't know how
|
|
many use the set).
|
|
Because this configuration and script files are extended from time to time,
|
|
they got their own homepage:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "initscripts-ipv6 homepage"
|
|
target "http://www.deepspace6.net/projects/initscripts-ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/projects/initscripts-ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
).
|
|
Because I began my IPv6 experience using a Red Hat Linux 5.0 clone, my IPv6
|
|
development systems are mostly Red Hat Linux based now, it's kind a logic
|
|
that the scripts are developed for this kind of distribution (so called
|
|
|
|
\emph on
|
|
historic issue
|
|
\emph default
|
|
).
|
|
Also it was very easy to extend some configuration files, create new ones
|
|
and create some simple hook for calling IPv6 setup during IPv4 setup.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Fortunately, in Red Hat Linux since 7.1 a snapshot of my IPv6 scripts is
|
|
included, this was and is still further on assisted by Pekka Savola.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Mandrake since version 8.0 also includes an IPv6-enabled initscript package,
|
|
but a minor bug still prevents usage (
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ifconfig
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
misses
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
inet6
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
before
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
add
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Test for IPv6 support of network configuration scripts
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You can test, whether your Linux distribution contain support for persistent
|
|
IPv6 configuration using my set.
|
|
Following script library should exist:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/etc/sysconfig/network-scripts/network-functions-ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Auto-magically test:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# test -f /etc/sysconfig/network-scripts/network-functions-ipv6 && echo
|
|
"Main
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ IPv6 script library exists"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The version of the library is important if you miss some features.
|
|
You can get it executing following (or easier look at the top of the file):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# source /etc/sysconfig/network-scripts/network-functions-ipv6 &&
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ getversion_ipv6_functions
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
20011124
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In shown example, the used version is
|
|
\series bold
|
|
20011124
|
|
\series default
|
|
.
|
|
Check this against latest information on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "initscripts-ipv6 homepage"
|
|
target "http://www.deepspace6.net/projects/initscripts-ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/projects/initscripts-ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
) to see what has been changed.
|
|
You will find there also a change-log.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Short hint for enabling IPv6 on current RHL 7.1, 7.2, 7.3, ...
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Check whether running system has already IPv6 module loaded
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# modprobe -c | grep net-pf-10
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
alias net-pf-10 off
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
If result is
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
off
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, then enable IPv6 networking by editing /etc/sysconfig/network, add following
|
|
new line
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
NETWORKING_IPV6=yes
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Reboot or restart networking using
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# service network restart
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Now IPv6 module should be loaded
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# modprobe -c | grep ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
alias net-pf-10 ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If your system is on a link which provides router advertisement, autoconfigurati
|
|
on will be done automatically.
|
|
For more information which settings are supported see /usr/share/doc/initscript
|
|
s-$version/sysconfig.txt.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
SuSE Linux
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In newer 7.x versions there is a really rudimentary support available, see
|
|
/etc/rc.config for details.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because of the really different configuration and script file structure
|
|
it is hard (or impossible) to use the set for Red Hat Linux and clones
|
|
with this distribution.
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
In versions 8.x they completly change their configuration setup.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
SuSE Linux 7.3
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "How to setup 6to4 IPv6 with SuSE 7.3"
|
|
target "http://www.feyrer.de/IPv6/SuSE73-IPv6+6to4-setup.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
SuSE Linux 8.0
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 address configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Edit file /etc/sysconfig/network/ifcfg-<Interface-Name> and setup following
|
|
value
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IP6ADDR="<ipv6-address>/<prefix>"
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Additional information
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See file /usr/share/doc/packages/sysconfig/README
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
SuSE Linux 8.1
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 address configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Edit file /etc/sysconfig/network/ifcfg-<Interface-Name> and setup following
|
|
value
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPADDR="<ipv6-address>/<prefix>"
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Additional information
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See file /usr/share/doc/packages/sysconfig/Network
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "Configuration-Debian-Linux"
|
|
|
|
\end_inset
|
|
|
|
Debian Linux
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following information was contributed by Stephane Bortzmeyer <bortzmeyer
|
|
at nic dot fr>
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Be sure that IPv6 is loaded, either because it is compiled into the kernel
|
|
or because the module is loaded.
|
|
For the latest, three solutions, adding it to /etc/modules, using the pre-up
|
|
trick shown later or using kmod (not detailed here).
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Configure your interface.
|
|
Here we assume eth0 and address (2001:0db8:1234:5::1:1).
|
|
Edit /etc/network/interfaces:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
iface eth0 inet6 static
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pre-up modprobe ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
address 2001:0db8:1234:5::1:1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# To suppress completely autoconfiguration:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# up echo 0 > /proc/sys/net/ipv6/conf/all/autoconf
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
netmask 64
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# The router is autoconfigured and has no fixed address.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# It is magically
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# found.
|
|
(/proc/sys/net/ipv6/conf/all/accept_ra).
|
|
Otherwise:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#gateway 2001:0db8:1234:5::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
And you reboot or you just
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ifup --force eth0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
and you have your static address.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Further information
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
|
|
\lang ngerman
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 with Debian Linux"
|
|
target "http://ipv6.debian.net/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Jean-Marc V.
|
|
Liotier's
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "HOWTO for Freenet6 & Debian Users"
|
|
target "http://www.ruwenzori.net/ipv6/Jims_LAN_IPv6_global_connectivity_howto.html"
|
|
|
|
\end_inset
|
|
|
|
(announced 24.12.2002 on
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "mailinglist"
|
|
reference "information-maillists"
|
|
|
|
\end_inset
|
|
|
|
users@ipv6.org )
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-autoconfiguration"
|
|
|
|
\end_inset
|
|
|
|
Auto-configuration
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Stateless auto-configuration out-of-the-box
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Is supported and seen on the assigned link-local address after an IPv6-enabled
|
|
interface is up.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 addr show dev eth0 scope link
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qlen1000
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 fe80::211:d8ff:fe6b:f0f5/64 scope link
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
valid_lft forever preferred_lft forever
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Stateless auto-configuration using Router Advertisement Daemon (radvd)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
to be filled.
|
|
See
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "radvd daemon autoconfiguration"
|
|
reference "hints-daemons-radvd"
|
|
|
|
\end_inset
|
|
|
|
below.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Dynamic Host Configuration Protocol v6 (DHCPv6)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
After a long time discussing issues, finally
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3315 / Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"
|
|
target "http://www.faqs.org/rfcs/rfc3315.html"
|
|
|
|
\end_inset
|
|
|
|
was finished.
|
|
At time updating this part (10/2005) currently two implementations are
|
|
available:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Dibbler"
|
|
target "http://klub.com.pl/dhcpv6/"
|
|
|
|
\end_inset
|
|
|
|
by Tomasz Mrugalski <thomson at klub dot com dot pl> (
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Hints for configuration"
|
|
reference "hints-daemons-dibbler"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DHCPv6 on Sourceforge"
|
|
target "http://dhcpv6.sourceforge.net/"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Hints for configuration"
|
|
reference "hints-daemons-dhcpv6"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ISC DHCP"
|
|
target "http://www.isc.org/software/dhcp"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Hints for configuration"
|
|
reference "hints-daemons-isc-dhcp"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-mobility"
|
|
|
|
\end_inset
|
|
|
|
Mobility
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Common information
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Node Mobility
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Support for IPv6 mobility can be enabled in Linux by installing the MIPL2
|
|
implementation found at:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.mobile-ipv6.org/"
|
|
target "http://www.mobile-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This implementation is compliant with RFC 3775.
|
|
It is composed of a kernel patch and a mobility daemon called mip6d.
|
|
Version 2.0.1 applies on Linux kernel 2.6.15.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Installation and setup are described in the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux Mobile IPv6 HOWTO"
|
|
target "http://tldp.org/HOWTO/Mobile-IPv6-HOWTO/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Network Mobility
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
There also exists an implementation of network mobility for Linux, it is
|
|
called NEPL and is based on MIPL.
|
|
It can also be downloaded from:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.mobile-ipv6.org/"
|
|
target "http://www.mobile-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The HOWTO document describing setup and configuration is available at:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.nautilus6.org/doc/nepl-howto/"
|
|
target "http://www.nautilus6.org/doc/nepl-howto/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Links
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Mobile IPv6 for Linux (MIPL) project:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.mobile-ipv6.org/"
|
|
target "http://www.mobile-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Nautilus6 working group:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://nautilus6.org/"
|
|
target "http://nautilus6.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Fast Handovers for Mobile IPv6 for Linux project:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.fmipv6.org/"
|
|
target "http://www.fmipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
USAGI-patched Mobile IPv6 for Linux (UMIP):
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://umip.linux-ipv6.org/"
|
|
target "http://umip.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Deploying IPsec/IKE-protected MIPv6 under Linux:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://natisbad.org/MIPv6/"
|
|
target "http://natisbad.org/MIPv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3775 / Mobility Support in IPv6"
|
|
target "http://www.faqs.org/rfcs/rfc3775.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3776 / Using IPsec to Protect Mobile IPv6 Signaling Between Mobile Nodes and Home Agents"
|
|
target "http://www.faqs.org/rfcs/rfc3776.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3963 / Network Mobility (NEMO)"
|
|
target "http://www.faqs.org/rfcs/rfc3963.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4068 / Fast Handovers for Mobile IPv6"
|
|
target "http://www.faqs.org/rfcs/rfc4068.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4423 / Host Identity Protocol (HIP) Architecture"
|
|
target "http://www.faqs.org/rfcs/rfc4423.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 5201 / Host Identity Protocol"
|
|
target "http://www.faqs.org/rfcs/rfc5201.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
HIP implementations:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://infrahip.hiit.fi/"
|
|
target "http://infrahip.hiit.fi/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://hip4inter.net/"
|
|
target "http://hip4inter.net/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.openhip.org/"
|
|
target "http://www.openhip.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-firewalling-security"
|
|
|
|
\end_inset
|
|
|
|
Firewalling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6 firewalling is important, especially if using IPv6 on internal networks
|
|
with global IPv6 addresses.
|
|
Because unlike at IPv4 networks where in common internal hosts are protected
|
|
automatically using private IPv4 addresses like
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1918 / Address Allocation for Private Internets"
|
|
target "http://www.faqs.org/rfcs/rfc1918.html"
|
|
|
|
\end_inset
|
|
|
|
or Automatic Private IP Addressing (APIPA)
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Google search for Microsoft + APIPA"
|
|
target "http://www.google.com/search?q=apipa+microsoft"
|
|
|
|
\end_inset
|
|
|
|
, in IPv6 normally global addresses are used and someone with IPv6 connectivity
|
|
can reach all internal IPv6 enabled nodes.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "firewalling-netfilter6"
|
|
|
|
\end_inset
|
|
|
|
Firewalling using netfilter6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Native IPv6 firewalling is only supported in kernel versions 2.4+.
|
|
In older 2.2- you can only filter IPv6-in-IPv4 by protocol 41.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Attention: no warranty that described rules or examples can really protect
|
|
your system!
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Audit your ruleset after installation, see
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
reference "IPv6-security-auditing"
|
|
|
|
\end_inset
|
|
|
|
for more.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Since kernel version 2.6.20 IPv6 connection tracking is fully working (and
|
|
does not break IPv4 NAT anymore like versions before)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
More information
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Netfilter project"
|
|
target "http://www.netfilter.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "maillist archive of netfilter users"
|
|
target "https://lists.netfilter.org/mailman/listinfo/netfilter"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "maillist archive of netfilter developers"
|
|
target "https://lists.netfilter.org/mailman/listinfo/netfilter-devel"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Unofficial status informations"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-kernel.html#netfilter6 "
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Preparation
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This step is only needed if distributed kernel and netfilter doesn't fit
|
|
your requirements and new features are available but still not built-in.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Get sources
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Get the latest kernel source:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.kernel.org/"
|
|
target "http://www.kernel.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Get the latest iptables package:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Source tarball (for kernel patches):
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.netfilter.org/"
|
|
target "http://www.netfilter.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Extract sources
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change to source directory:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# cd /path/to/src
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Unpack and rename kernel sources
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tar z|jxf kernel-version.tar.gz|bz2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# mv linux linux-version-iptables-version+IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Unpack iptables sources
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tar z|jxf iptables-version.tar.gz|bz2
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Apply latest iptables/IPv6-related patches to kernel source
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change to iptables directory
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# cd iptables-version
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Apply pending patches
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# make pending-patches KERNEL_DIR=/path/to/src/linux-version-iptables-version/
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Apply additional IPv6 related patches (still not in the vanilla kernel included)
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# make patch-o-matic KERNEL_DIR=/path/to/src/linux-version-iptables-version/
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Say yes at following options (iptables-1.2.2)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ah-esp.patch
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
masq-dynaddr.patch (only needed for systems with dynamic IP assigned WAN
|
|
connections like PPP or PPPoE)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ipv6-agr.patch.ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ipv6-ports.patch.ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
LOG.patch.ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
REJECT.patch.ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Check IPv6 extensions
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# make print-extensions
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Extensions found: IPv6:owner IPv6:limit IPv6:mac IPv6:multiport
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Configure, build and install new kernel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Change to kernel sources
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# cd /path/to/src/linux-version-iptables-version/
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Edit Makefile
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
- EXTRAVERSION =
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ EXTRAVERSION = -iptables-version+IPv6-try
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Run configure, enable IPv6 related
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Code maturity level options
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Prompt for development and/or incomplete code/drivers
|
|
: yes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Networking options
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Network packet filtering: yes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
The IPv6 protocol: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPv6: Netfilter Configuration
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IP6 tables support: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
All new options like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
limit match support: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MAC address match support: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Multiple port match support: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Owner match support: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
netfilter MARK match support: module
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Aggregated address check: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Packet filtering: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
REJECT target support: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
LOG target support: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Packet mangling: module
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MARK target support: module
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Configure other related to your system, too
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Compilation and installing: see the kernel section here and other HOWTOs
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Rebuild and install binaries of iptables
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Make sure, that upper kernel source tree is also available at /usr/src/linux/
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Rename older directory
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# mv /usr/src/linux /usr/src/linux.old
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Create a new softlink
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ln -s /path/to/src/linux-version-iptables-version /usr/src/linux
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Rebuild SRPMS
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# rpm --rebuild /path/to/SRPMS/iptables-version-release.src.rpm
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Install new iptables packages (iptables + iptables-ipv6)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
On RH 7.1 systems, normally, already an older version is installed, therefore
|
|
use "freshen"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# rpm -Fhv /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
If not already installed, use "install"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# rpm -ihv /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
On RH 6.2 systems, normally, no kernel 2.4.x is installed, therefore the requiremen
|
|
ts don't fit.
|
|
Use "--nodeps" to install it
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# rpm -ihv --nodeps /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Perhaps it's necessary to create a softlink for iptables libraries where
|
|
iptables looks for them
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ln -s /lib/iptables/ /usr/lib/iptables
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Usage
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Check for support
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Load module, if so compiled
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# modprobe ip6_tables
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Check for capability
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# [ ! -f /proc/net/ip6_tables_names ] && echo "Current kernel doesn't support
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 'ip6tables' firewalling (IPv6)!"
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Learn how to use ip6tables
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
List all IPv6 netfilter entries
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Short
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -L
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Extended
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -n -v --line-numbers -L
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
List specified filter
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -n -v --line-numbers -L INPUT
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Insert a log rule at the input filter with options
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables --table filter --append INPUT -j LOG --log-prefix "INPUT:"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ --log-level 7
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Insert a drop rule at the input filter
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables --table filter --append INPUT -j DROP
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Delete a rule by number
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables --table filter --delete INPUT 1
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Enable connection tracking
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Since kernel version 2.6.20 IPv6 connection tracking is well supported and
|
|
should be used instead of using stateless filter rules.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Allow ICMPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Using older kernels (unpatched kernel 2.4.5 and iptables-1.2.2) no type can
|
|
be specified
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Accept incoming ICMPv6 through tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A INPUT -i sit+ -p icmpv6 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Allow outgoing ICMPv6 through tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A OUTPUT -o sit+ -p icmpv6 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Newer kernels allow specifying of ICMPv6 types:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Rate-limiting
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because it can happen (author already saw it to times) that an ICMPv6 storm
|
|
will raise up, you should use available rate limiting for at least ICMPv6
|
|
ruleset.
|
|
In addition logging rules should also get rate limiting to prevent DoS
|
|
attacks against syslog and storage of log file partition.
|
|
An example for a rate limited ICMPv6 looks like:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A INPUT --protocol icmpv6 --icmpv6-type echo-request
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ -j ACCEPT --match limit --limit 30/minute
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Allow incoming SSH
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Here an example is shown for a ruleset which allows incoming SSH connection
|
|
from a specified IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Allow incoming SSH from 2001:0db8:100::1/128
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A INPUT -i sit+ -p tcp -s 2001:0db8:100::1/128 --sport 512:65535
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ --dport 22 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Allow response packets (
|
|
\series bold
|
|
no longer needed if connection tracking is used!
|
|
\series default
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A OUTPUT -o sit+ -p tcp -d 2001:0db8:100::1/128 --dport 512:65535
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ --sport 22 ! --syn -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Enable tunneled IPv6-in-IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To accept tunneled IPv6-in-IPv4 packets, you have to insert rules in your
|
|
|
|
\series bold
|
|
IPv4 firewall setup
|
|
\series default
|
|
relating to such packets, for example
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Accept incoming IPv6-in-IPv4 on interface ppp0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iptables -A INPUT -i ppp0 -p ipv6 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Allow outgoing IPv6-in-IPv4 to interface ppp0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iptables -A OUTPUT -o ppp0 -p ipv6 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If you have only a static tunnel, you can specify the IPv4 addresses, too,
|
|
like
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Accept incoming IPv6-in-IPv4 on interface ppp0 from tunnel endpoint 192.0.2.2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iptables -A INPUT -i ppp0 -p ipv6 -s 192.0.2.2 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Allow outgoing IPv6-in-IPv4 to interface ppp0 to tunnel endpoint 192.0.2.2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iptables -A OUTPUT -o ppp0 -p ipv6 -d 192.0.2.2 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Protection against incoming TCP connection requests
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\series bold
|
|
VERY RECOMMENDED!
|
|
\series default
|
|
For security issues you should really insert a rule which blocks incoming
|
|
TCP connection requests.
|
|
Adapt "-i" option, if other interface names are in use!
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Block incoming TCP connection requests to this host
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -I INPUT -i sit+ -p tcp --syn -j DROP
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Block incoming TCP connection requests to hosts behind this router
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -I FORWARD -i sit+ -p tcp --syn -j DROP
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Perhaps the rules have to be placed below others, but that is work you have
|
|
to think about it.
|
|
Best way is to create a script and execute rules in a specified way.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Protection against incoming UDP connection requests
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\series bold
|
|
ALSO RECOMMENDED!
|
|
\series default
|
|
Like mentioned on my firewall information it's possible to control the
|
|
ports on outgoing UDP/TCP sessions.
|
|
So if all of your local IPv6 systems are using local ports e.g.
|
|
from 32768 to 60999 you are able to filter UDP connections also (until
|
|
connection tracking works) like:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Block incoming UDP packets which cannot be responses of outgoing requests
|
|
of this host
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -I INPUT -i sit+ -p udp ! --dport 32768:60999 -j DROP
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Block incoming UDP packets which cannot be responses of forwarded requests
|
|
of hosts behind this router
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -I FORWARD -i sit+ -p udp ! --dport 32768:60999 -j DROP
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Examples
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Simple example for Fedora
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following lines show a simple firewall configuration for Fedora 6 (since
|
|
kernel version 2.6.20).
|
|
It was modfied from the default one (generated by
|
|
\shape italic
|
|
system-config-firewall
|
|
\shape default
|
|
) for supporting connection
|
|
\series bold
|
|
tracking
|
|
\series default
|
|
and return the proper ICMPv6 code for rejects.
|
|
Incoming SSH (port 22) connections are allowed.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
File: /etc/sysconfig/ip6tables
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*filter :INPUT ACCEPT [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
:FORWARD ACCEPT [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
:OUTPUT ACCEPT [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
:RH-Firewall-1-INPUT - [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A INPUT -j RH-Firewall-1-INPUT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A FORWARD -j RH-Firewall-1-INPUT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
COMMIT
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For completeness also the IPv4 configuration is shown here:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
File: /etc/sysconfig/iptables
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*filter :INPUT ACCEPT [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
:FORWARD ACCEPT [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
:OUTPUT ACCEPT [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
:RH-Firewall-1-INPUT - [0:0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A INPUT -j RH-Firewall-1-INPUT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A FORWARD -j RH-Firewall-1-INPUT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j
|
|
ACCEPT
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
COMMIT
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usage:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Create/modify the configuration files
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Activate IPv4 & IPv6 firewalling
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# service iptables start
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# service ip6tables start
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Enable automatic start after reboot
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# chkconfig iptables on
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# chkconfig ip6tables on
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Sophisticated example
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following lines show a more sophisticated
|
|
\series bold
|
|
but still stateless filter
|
|
\series default
|
|
setup as an example.
|
|
Happy netfilter6 ruleset creation....
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -n -v -L
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain INPUT (policy DROP 0 packets, 0 bytes)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 extIN all sit+ * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
4 384 intIN all eth0 * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT all * * ::1/128 ::1/128
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT all lo * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `INPUT-default:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain FORWARD (policy DROP 0 packets, 0 bytes)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 int2ext all eth0 sit+ ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ext2int all sit+ eth0 ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `FORWARD-default:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 extOUT all * sit+ ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
4 384 intOUT all * eth0 ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT all * * ::1/128 ::1/128
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT all * lo ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `OUTPUT-default:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain ext2int (1 references)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT icmpv6 * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `ext2int-default:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP tcp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP udp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain extIN (1 references)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * 3ffe:400:100::1/128 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ tcp spts:512:65535 dpt:22
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * 3ffe:400:100::2/128 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ tcp spts:512:65535 dpt:22
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT icmpv6 * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT udp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ udp spts:1:65535 dpts:1024:65535
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ limit: avg 5/min burst 5 LOG flags 0 level 7 prefix `extIN-default:'
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain extOUT (1 references)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * ::/0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:0db8:100::1/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * ::/0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:0db8:100::2/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT icmpv6 * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ tcp spts:1024:65535 dpts:1:65535
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT udp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ udp spts:1024:65535 dpts:1:65535
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `extOUT-default:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain int2ext (1 references)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT icmpv6 * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT tcp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ tcp spts:1024:65535 dpts:1:65535
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `int2ext:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `int2ext-default:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP tcp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP udp * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain intIN (1 references)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT all * * ::/0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ fe80::/ffc0::
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
4 384 ACCEPT all * * ::/0 ff02::/16
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Chain intOUT (1 references)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pkts bytes target prot opt in out source destination
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 ACCEPT all * * ::/0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ fe80::/ffc0::
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
4 384 ACCEPT all * * ::/0 ff02::/16
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 LOG all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ LOG flags 0 level 7 prefix `intOUT-default:'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0 0 DROP all * * ::/0 ::/0
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "nat-netfilter6"
|
|
|
|
\end_inset
|
|
|
|
Network Address Translation (NAT) using netfilter6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Since at least Linux kernel version 3.9.0 and using ip6tables since 1.4.18 also
|
|
Network Address Translation (NAT) is usable.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 Masquerading
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Like in IPv4 clients behind a router can be hided by using IPv6 masquerading
|
|
(hide/overlap NAT), e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -t nat -A POSTROUTING -o sixxs -s fec0::/64 -j MASQUERADE
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 Destination NAT
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A dedicated public IPv6 address can be forwarded to an internal IPv6 address,
|
|
e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -t nat -A PREROUTING -d 2001:db8:0:1:5054:ff:fe01:2345 -i sixxs
|
|
-j DNAT --to-destination fec0::5054:ff:fe01:2345
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 Port Forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A dedicated specified port can be forwarded to an internal system, e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -t nat -A PREROUTING -i sixxs -p tcp --dport 8080 -j DNAT --to-desti
|
|
nation [fec0::1234]:80
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-security"
|
|
|
|
\end_inset
|
|
|
|
Security
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Node security
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
It's very recommended to apply all available patches and disable all not
|
|
necessary services.
|
|
Also bind services to the needed IPv4/IPv6 addresses only and install local
|
|
firewalling.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled...
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Access limitations
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Many services uses the tcp_wrapper library for access control.
|
|
Below is described the
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "use of tcp_wrapper"
|
|
reference "hints-daemons-tcpwrapper"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled...
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "IPv6-security-auditing"
|
|
|
|
\end_inset
|
|
|
|
IPv6 security auditing
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Currently there are no comfortable tools out which are able to check a system
|
|
over network for IPv6 security issues.
|
|
Neither
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Nessus"
|
|
target "http://www.nessus.org/"
|
|
|
|
\end_inset
|
|
|
|
nor any commercial security scanner is as far as I know able to scan IPv6
|
|
addresses.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Legal issues
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ATTENTION: always take care that you only scan your own systems or after
|
|
receiving a written order, otherwise legal issues are able to come up to
|
|
you.
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
CHECK destination IPv6 addresses TWICE before starting a scan.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Security auditing using IPv6-enabled netcat
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With the IPv6-enabled netcat (see
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6+Linux-status-apps/security-auditing"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-apps.html#security-auditing"
|
|
|
|
\end_inset
|
|
|
|
for more) you can run a portscan by wrapping a script around which run
|
|
through a port range, grab banners and so on.
|
|
Usage example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# nc6 ::1 daytime
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
13 JUL 2002 11:22:22 CEST
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Security auditing using IPv6-enabled nmap
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NMap"
|
|
target "http://www.insecure.org/nmap/"
|
|
|
|
\end_inset
|
|
|
|
, one of the best portscaner around the world, supports IPv6 since version
|
|
3.10ALPHA1.
|
|
Usage example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# nmap -6 -sT ::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Starting nmap V.
|
|
3.10ALPHA3 ( www.insecure.org/nmap/ )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Interesting ports on localhost6 (::1):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
(The 1600 ports scanned but not shown below are in state: closed)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Port State Service
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
22/tcp open ssh
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
53/tcp open domain
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
515/tcp open printer
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2401/tcp open cvspserver
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Nmap run completed -- 1 IP address (1 host up) scanned in 0.525 seconds
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Security auditing using IPv6-enabled strobe
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Strobe is a (compared to NMap) more a low budget portscanner, but there
|
|
is an IPv6-enabling patch available (see
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6+Linux-status-apps/security-auditing"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-apps.html#security-auditing"
|
|
|
|
\end_inset
|
|
|
|
for more).
|
|
Usage example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ./strobe ::1 strobe 1.05 (c) 1995-1999 Julian Assange <proff@iq.org>.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1 2401 unassigned unknown
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1 22 ssh Secure Shell - RSA encrypted rsh
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1 515 printer spooler (lpd)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1 6010 unassigned unknown
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1 53 domain Domain Name Server
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: strobe isn't really developed further on, the shown version number
|
|
isn't the right one.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Audit results
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If the result of an audit mismatch your IPv6 security policy, use IPv6 firewalli
|
|
ng to close the holes, e.g.
|
|
using netfilter6 (see
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Firewalling/Netfilter6"
|
|
reference "firewalling-netfilter6"
|
|
|
|
\end_inset
|
|
|
|
for more).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Info: More detailed information concerning IPv6 Security can be found here:
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IETF drafts - IPv6 Operations (v6ops)"
|
|
target "http://www.ietf.org/ids.by.wg/v6ops.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3964 / Security Considerations for 6to4"
|
|
target "http://www.faqs.org/rfcs/rfc3964.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-encryption-authentication"
|
|
|
|
\end_inset
|
|
|
|
Encryption and Authentication
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Unlike in IPv4, encryption and authentication is a mandatory feature of
|
|
IPv6.
|
|
Those features are normally implemented using IPsec (which can be also
|
|
used by IPv4).
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Modes of using encryption and authentication
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Two modes of encryption and authentication of a connection are possible:
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Transport mode
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Transport mode is a real end-to-end connection mode.
|
|
Here, only the payload (usually ICMP, TCP or UDP) is encrypted with their
|
|
particular header, while the IP header is not encrypted (but usually included
|
|
in authentication).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Using AES-128 for encryption and SHA1 for authentication, this mode decreases
|
|
the MTU by 42 octets.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Tunnel mode
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Tunnel mode can be used either for end-to-end or for gateway-to-gateway
|
|
connection modes.
|
|
Here, the complete IP packet is being encrypted and gets a new IP header
|
|
prepended, all together constituing a new IP packet (this mechanism is
|
|
also known as "encapsulation")
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This mode usually decreases the MTU by 40 octets from the MTU of transport
|
|
mode.
|
|
I.e.
|
|
using AES-128 for encryption and SHA1 for authentication 82 octets less
|
|
than the normal MTU.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Support in kernel (ESP and AH)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Support in vanilla Linux kernel 2.4.x
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
At the time of writing missing in vanilla up to 2.4.28.
|
|
There was an issue about keeping the Linux kernel source free of export/import-
|
|
control-laws regarding encryption code.
|
|
This is also one case why
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "FreeS/WAN project"
|
|
target "http://www.freeswan.org/"
|
|
|
|
\end_inset
|
|
|
|
wasn't included in vanilla source.
|
|
Perhaps a backport from 2.6.x will be done in the future.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Support in vanilla Linux kernel 2.6.x
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Current versions (as time of writing 2.6.9 and upper) support native IPsec
|
|
for IPv4 and IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Implementation was helped by the USAGI project.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Automatic key exchange (IKE)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPsec requires a key exchange of a secret.
|
|
This is mostly done automatically by so called IKE daemons.
|
|
They also handle the authentication of the peers, either by a common known
|
|
secret (so called
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
pre-shared secret
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
) or by RSA keys (which can also be used from X.509 certificates).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Currently, two different IKE daemons are available for Linux, which totally
|
|
differ in configuration and usage.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
I prefer
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
pluto
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
from the *S/WAN implementation because of the easier and one-config-only
|
|
setup.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
racoon
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
racoon
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is taken from the KAME project and ported to Linux.
|
|
Modern Linux distributions contain this daemon in the package
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ipsec-tools
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
Two executables are required for a proper IPsec setup.
|
|
Take a look on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux Advanced Routing & Traffic Control HOWTO / IPSEC"
|
|
target "http://lartc.org/howto/lartc.ipsec.html"
|
|
|
|
\end_inset
|
|
|
|
, too.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Manipulation of the IPsec SA/SP database with the tool
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
setkey
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
setkey
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is important to define the security policy (SP) for the kernel.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
File: /etc/racoon/setkey.sh
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Example for an end-to-end encrypted connection in transport mode
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#!/sbin/setkey -f
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
flush;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
spdflush;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
spdadd 2001:db8:1:1::1 2001:db8:2:2::2 any -P out ipsec esp/transport//require;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
spdadd 2001:db8:2:2::2 2001:db8:1:1::1 any -P in ipsec esp/transport//require;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Example for a end-to-end encrypted connection in tunnel mode
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#!/sbin/setkey -f
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
flush;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
spdflush;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
spdadd 2001:db8:1:1::1 2001:db8:2:2::2 any -P out ipsec
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ esp/tunnel/2001:db8:1:1::1-2001:db8:2:2::2/require;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
spdadd 2001:db8:2:2::2 2001:db8:1:1::1 any -P in ipsec
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ esp/tunnel/2001:db8:2:2::2-2001:db8:1:1::1/require;
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For the other peer, you have to replace
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
in
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
with
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
out
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Configuration of the IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
racoon
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
racoon
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
requires a configuration file for proper execution.
|
|
It includes the related settings to the security policy, which should be
|
|
set up previously using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
setkey
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
File: /etc/racoon/racoon.conf
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# Racoon IKE daemon configuration file.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# See 'man racoon.conf' for a description of the format and entries.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
path include "/etc/racoon";
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
path pre_shared_key "/etc/racoon/psk.txt";
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
listen
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
isakmp 2001:db8:1:1::1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
remote 2001:db8:2:2::2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exchange_mode main;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
lifetime time 24 hour;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
proposal
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
encryption_algorithm 3des;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hash_algorithm md5;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
authentication_method pre_shared_key;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
dh_group 2;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# gateway-to-gateway
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sainfo address 2001:db8:1:1::1 any address 2001:db8:2:2::2 any
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
lifetime time 1 hour;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
encryption_algorithm 3des;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
authentication_algorithm hmac_md5;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
compression_algorithm deflate;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sainfo address 2001:db8:2:2::2 any address 2001:db8:1:1::1 any
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
lifetime time 1 hour;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
encryption_algorithm 3des;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
authentication_algorithm hmac_md5;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
compression_algorithm deflate;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Also set up the pre-shared secret:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
File: /etc/racoon/psk.txt
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# file for pre-shared keys used for IKE authentication
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# format is: 'identifier' 'key'
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:2:2::2 verysecret
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Running IPsec with IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
racoon
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
At least the daemon needs to be started.
|
|
For the first time, use debug and foreground mode.
|
|
The following example shows a successful IKE phase 1 (ISAKMP-SA) and 2
|
|
(IPsec-SA) negotiation:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# racoon -F -v -f /etc/racoon/racoon.conf
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Foreground mode.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:30:15: INFO: @(#)ipsec-tools 0.3.3
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ (http://ipsec-tools.sourceforge.net)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:30:15: INFO: @(#)This product linked
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ OpenSSL 0.9.7a Feb 19 2003 (http://www.openssl.org/)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:30:15: INFO: 2001:db8:1:1::1[500] used as isakmp port (fd=7)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:31:06: INFO: IPsec-SA request for 2001:db8:2:2::2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ queued due to no phase1 found.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:31:06: INFO: initiate new phase 1 negotiation:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:db8:1:1::1[500]<=>2001:db8:2:2::2[500]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:31:06: INFO: begin Identity Protection mode.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:31:09: INFO: ISAKMP-SA established
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:db8:1:1::1[500]-2001:db8:2:2::2[500] spi:da3d3693289c9698:ac039a402b2db40
|
|
1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:31:09: INFO: initiate new phase 2 negotiation:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:6f8:900:94::2[0]<=>2001:db8:2:2::2[0]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:31:10: INFO: IPsec-SA established:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ESP/Tunnel 2001:db8:2:2::2->2001:db8:1:1::1 spi=253935531(0xf22bfab)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2005-01-01 20:31:10: INFO: IPsec-SA established:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ ESP/Tunnel 2001:db8:1:1::1->2001:db8:2:2::2 spi=175002564(0xa6e53c4)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Each direction got its own IPsec-SA (like defined in the IPsec standard).
|
|
With
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
tcpdump
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
on the related interface, you will see as result of an IPv6 ping:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
20:35:55.305707 2001:db8:1:1::1 > 2001:db8:2:2::2: ESP(spi=0x0a6e53c4,seq=0x3)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
20:35:55.537522 2001:db8:2:2::2 > 2001:db8:1:1::1: ESP(spi=0x0f22bfab,seq=0x3)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As expected, the negotiated SPIs are being used here.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
And using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
setkey
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, current active parameters are shown:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# setkey -D
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:1:1::1 2001:db8:2:2::2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
esp mode=tunnel spi=175002564(0x0a6e53c4) reqid=0(0x00000000)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
E: 3des-cbc bd26bc45 aea0d249 ef9c6b89 7056080f 5d9fa49c 924e2edd
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
A: hmac-md5 60c2c505 517dd8b7 c9609128 a5efc2db
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
seq=0x00000000 replay=4 flags=0x00000000 state=mature
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
created: Jan 1 20:31:10 2005 current: Jan 1 20:40:47 2005
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
diff: 577(s) hard: 3600(s) soft: 2880(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
last: Jan 1 20:35:05 2005 hard: 0(s) soft: 0(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
current: 540(bytes) hard: 0(bytes) soft: 0(bytes)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
allocated: 3 hard: 0 soft: 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadb_seq=1 pid=22358 refcnt=0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:2:2::2 2001:db8:1:1::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
esp mode=tunnel spi=253935531(0x0f22bfab) reqid=0(0x00000000)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
E: 3des-cbc c1ddba65 83debd62 3f6683c1 20e747ac 933d203f 4777a7ce
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
A: hmac-md5 3f957db9 9adddc8c 44e5739d 3f53ca0e
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
seq=0x00000000 replay=4 flags=0x00000000 state=mature
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
created: Jan 1 20:31:10 2005 current: Jan 1 20:40:47 2005
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
diff: 577(s) hard: 3600(s) soft: 2880(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
last: Jan 1 20:35:05 2005 hard: 0(s) soft: 0(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
current: 312(bytes) hard: 0(bytes) soft: 0(bytes)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
allocated: 3 hard: 0 soft: 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadb_seq=0 pid=22358 refcnt=0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
pluto
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
pluto
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
is included in distributions of the *S/WAN projects.
|
|
*S/WAN project starts at the beginning as
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "FreeS/WAN"
|
|
target "http://www.freeswan.org/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Unfortunately, the FreeS/WAN project stopped further development in 2004.
|
|
Because of the slow pace of development in the past, two spin-offs started:
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "strongSwan"
|
|
target "http://www.strongswan.org/"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Openswan"
|
|
target "http://www.openswan.org/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Today, readily installable packages are available for at least Openswan
|
|
(included in Fedora Core 3).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A major difference to
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
racoon
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, only one configuration file is required.
|
|
Also, an initscript exists for automatic setup after booting.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Configuration of the IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
pluto
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The configuration is very similar to the IPv4 one, only one important option
|
|
is necessary.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
File: /etc/ipsec.conf
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /etc/ipsec.conf - Openswan IPsec configuration file
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# Manual: ipsec.conf.5
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
version 2.0 # conforms to second version of ipsec.conf specification
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# basic configuration
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
config setup
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# Debug-logging controls: "none" for (almost) none, "all" for lots.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# klipsdebug=none
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# plutodebug="control parsing"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#Disable Opportunistic Encryption
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
include /etc/ipsec.d/examples/no_oe.conf
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
conn ipv6-p1-p2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
connaddrfamily=ipv6 # Important for IPv6, but no longer needed
|
|
since StrongSwan 4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
left=2001:db8:1:1::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
right=2001:db8:2:2::2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
authby=secret
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
esp=aes128-sha1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ike=aes128-sha-modp1024
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
type=transport
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#type=tunnel
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
compress=no
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#compress=yes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
auto=add
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#auto=up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Don't forget to define the pre-shared secret here also.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
File: /etc/ipsec.secrets
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:1:1::1 2001:db8:2:2::2 : PSK "verysecret"
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Running IPsec with IKE daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
pluto
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If installation of Openswan was successfully, an initscript should exist
|
|
for starting IPsec, simply run (on each peer):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /etc/rc.d/init.d/ipsec start
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Afterwards, start this connection on one peer.
|
|
If you saw the line
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
IPsec SA established
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, all worked fine.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ipsec auto --up ipv6-peer1-peer2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
104 "ipv6-p1-p2" #1: STATE_MAIN_I1: initiate
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
106 "ipv6-p1-p2" #1: STATE_MAIN_I2: sent MI2, expecting MR2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
108 "ipv6-p1-p2" #1: STATE_MAIN_I3: sent MI3, expecting MR3
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
004 "ipv6-p1-p2" #1: STATE_MAIN_I4: ISAKMP SA established
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
112 "ipv6-p1-p2" #2: STATE_QUICK_I1: initiate
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
004 "ipv6-p1-p2" #2: STATE_QUICK_I2: sent QI2,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ IPsec SA established {ESP=>0xa98b7710 <0xa51e1f22}
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because *S/WAN and setkey/racoon do use the same IPsec implementation in
|
|
Linux 2.6.x kernel,
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
setkey
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
can be used here too to show current active parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# setkey -D
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:1:1::1 2001:db8:2:2::2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
esp mode=transport spi=2844489488(0xa98b7710) reqid=16385(0x00004001)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
E: aes-cbc 082ee274 2744bae5 7451da37 1162b483
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
A: hmac-sha1 b7803753 757417da 477b1c1a 64070455 ab79082c
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
seq=0x00000000 replay=64 flags=0x00000000 state=mature
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
created: Jan 1 21:16:32 2005 current: Jan 1 21:22:20 2005
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
diff: 348(s) hard: 0(s) soft: 0(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
last: hard: 0(s) soft: 0(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
current: 0(bytes) hard: 0(bytes) soft: 0(bytes)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
allocated: 0 hard: 0 soft: 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadb_seq=1 pid=23825 refcnt=0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:db8:2:2::2 2001:db8:1:1::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
esp mode=transport spi=2770214690(0xa51e1f22) reqid=16385(0x00004001)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
E: aes-cbc 6f59cc30 8d856056 65e07b76 552cac18
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
A: hmac-sha1 c7c7d82b abfca8b1 5440021f e0c3b335 975b508b
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
seq=0x00000000 replay=64 flags=0x00000000 state=mature
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
created: Jan 1 21:16:31 2005 current: Jan 1 21:22:20 2005
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
diff: 349(s) hard: 0(s) soft: 0(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
last: hard: 0(s) soft: 0(s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
current: 0(bytes) hard: 0(bytes) soft: 0(bytes)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
allocated: 0 hard: 0 soft: 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadb_seq=0 pid=23825 refcnt=0
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Additional informations:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
On Linux Kernel 2.6.x you can get the policy and status of IPsec also using
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip xfrm policy
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
...
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip xfrm state
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
...
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-qos"
|
|
|
|
\end_inset
|
|
|
|
Quality of Service (QoS)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6 supports QoS with use of Flow Labels and Traffic Classes.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Additional infos:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
|
|
\lang ngerman
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3697 / IPv6 Flow Label Specification"
|
|
target "http://www.faqs.org/rfcs/rfc3697.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
General
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Proper working QoS is only possible on the outgoing interface of a router
|
|
or host, where the bottleneck begins.
|
|
Everything else is a hickup and not subject to work as expected or has
|
|
a successful result.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-------------->-------
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Queue 1
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
--->--- ---->--------->--------->---------------
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Big pipe Queue 2 Queue 1 / Queue 2 / Queue 3 Thin Pipe
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
--->---- ---->--------->--------->---------------
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Queue 3 /
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-------------->-------
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Linux QoS using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
tc
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Linux is using
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
tc
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
from the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
iproute2
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
package to configure traffic shaping, generally described in the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux Advanced Routing & Traffic Control HOWTO"
|
|
target "http://lartc.org/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Example for a constant bitrate queuing
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
With the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
cbq
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
scheduler, pipes with constant bit rates can be defined.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Root qdisc definition
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define root qdisc with a bandwidth of 1000 MBit/s on eth1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc qdisc add dev eth1 root handle 1: cbq avpkt 1000 bandwidth 1000Mbit
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
QoS class definition
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a class 1:1 with 1 MBit/s
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc class add dev eth1 parent 1: classid 1:1 cbq rate 1Mbit allot 1500
|
|
bounded
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a class 1:2 with 50 MBit/s
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc class add dev eth1 parent 1: classid 1:2 cbq rate 50Mbit allot 1500
|
|
bounded
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a class 1:3 with 10 MBit/s
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc class add dev eth1 parent 1: classid 1:3 cbq rate 10Mbit allot 1500
|
|
bounded
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a class 1:4 with 200 kBit/s
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc class add dev eth1 parent 1: classid 1:4 cbq rate 200kbit allot 1500
|
|
bounded
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
QoS filter definition
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a filter for IPv4 (
|
|
\emph on
|
|
protocol ip
|
|
\emph default
|
|
), TCP (
|
|
\emph on
|
|
match ip protocol 6 0xff
|
|
\emph default
|
|
) destination port 5001 (
|
|
\emph on
|
|
match ip dport 5001 0xffff
|
|
\emph default
|
|
) using class 1:2 from above
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc filter add dev eth1 parent 1: protocol ip u32 match ip protocol
|
|
6 0xff match ip dport 5001 0xffff flowid 1:1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a filter for IPv6 (
|
|
\emph on
|
|
protocol ip
|
|
\emph default
|
|
), TCP (
|
|
\emph on
|
|
match ip6 protocol 6 0xff
|
|
\emph default
|
|
) destination port 5001 using class 1:2 from above
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc filter add dev eth1 parent 1: protocol ipv6 u32 match ip6 protocol
|
|
6 0xff match ip6 dport 5001 0xffff flowid 1:2
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a filter for IPv6 for packets having flow label 12345 (
|
|
\emph on
|
|
match ip6 flowlabel 12345 0x3ffff
|
|
\emph default
|
|
) using class 1:3 from above
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc filter add dev eth1 parent 1: protocol ipv6 u32 match ip6 flowlabel
|
|
12345 0x3ffff flowid 1:3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Define a filter for IPv6 for packets having Linux iptables mark 32 (
|
|
\emph on
|
|
handle 32 fw
|
|
\emph default
|
|
) specified using class 1:4 from above
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# tc filter add dev eth1 parent 1: protocol ipv6 handle 32 fw flowid 1:4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The last filter definition requires an entry in the ip6tables to mark a
|
|
packet
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip6tables -A POSTROUTING -t mangle -p tcp --dport 5003 -j MARK --set-mark
|
|
32
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Testing filter definitions using iperf
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Start on server side each one one separate console:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -s -p 5001
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -s -p 5002
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -s -p 5003
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Start on client side and compare results:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -c SERVER-IPv4 -p 5001 (expected: 1 MBit/s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -c SERVER-IPv6 -p 5001 (expected: 50 MBit/s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -c SERVER-IPv4 -p 5002 (expected: >> 50 MBit/s && <= 1000
|
|
MBit/s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -c SERVER-IPv6 -p 5002 (expected: >> 50 MBit/s && <= 1000
|
|
MBit/s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -c SERVER-IPv4 -p 5003 (expected: >> 50 MBit/s && <= 1000
|
|
MBit/s)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# iperf -V -c SERVER-IPv6 -p 5003 (expected: 200 kBit/s)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The rate result should be as defined in the classes (see above), the results
|
|
on port 5002 should be very similar independend from used IP version.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-hints-daemons"
|
|
|
|
\end_inset
|
|
|
|
Hints for IPv6-enabled daemons
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Here some hints are shown for IPv6-enabled daemons.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-bind"
|
|
|
|
\end_inset
|
|
|
|
Berkeley Internet Name Domain (BIND) daemon
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
named
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6 is supported since version 9.
|
|
Always use newest available version.
|
|
At least version 9.1.3 must be used, older versions can contain remote exploitabl
|
|
e security holes.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Listening on IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: unlike in IPv4 current versions doesn't allow to bind a server socket
|
|
to dedicated IPv6 addresses, so only
|
|
\emph on
|
|
any
|
|
\emph default
|
|
or
|
|
\emph on
|
|
none
|
|
\emph default
|
|
are valid.
|
|
Because this can be a security issue, check the Access Control List (ACL)
|
|
section below, too!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Enable BIND named for listening on IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To enable IPv6 for listening, following options are requested to change
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
options {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# sure other options here, too
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
listen-on-v6 { any; };
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This should result after restart in e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# netstat -lnptu |grep "named
|
|
\backslash
|
|
W*$"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 :::53 :::* LISTEN 1234/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ # incoming TCP requests
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 1.2.3.4:53 0.0.0.0:* 1234/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ # incoming UDP requests to IPv4 1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 127.0.0.1:53 0.0.0.0:* 1234/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ # incoming UDP requests to IPv4 localhost
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 0.0.0.0:32868 0.0.0.0:* 1234/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ # dynamic chosen port for outgoing queries
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
udp 0 0 :::53 :::* 1234/named
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ # incoming UDP request to any IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
And a simple test looks like
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# dig localhost @::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
and should show you a result.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Disable BIND named for listening on IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To disable IPv6 for listening, following options are requested to change
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
options {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# sure other options here, too
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
listen-on-v6 { none; };
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 enabled Access Control Lists (ACL)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6 enabled ACLs are possible and should be used whenever it's possible.
|
|
An example looks like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
acl internal-net {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
127.0.0.1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1.2.3.0/24;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100::/56;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1/128;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::ffff:1.2.3.4/128;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
acl ns-internal-net {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1.2.3.4;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
1.2.3.5;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100::4/128;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2001:0db8:100::5/128;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This ACLs can be used e.g.
|
|
for queries of clients and transfer zones to secondary name-servers.
|
|
This prevents also your caching name-server to be used from outside using
|
|
IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
options {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# sure other options here, too
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
listen-on-v6 { none; };
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
allow-query { internal-net; };
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
allow-transfer { ns-internal-net; };
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
It's also possible to set the
|
|
\emph on
|
|
allow-query
|
|
\emph default
|
|
and
|
|
\emph on
|
|
allow-transfer
|
|
\emph default
|
|
option for most of single zone definitions, too.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Sending queries with dedicated IPv6 address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This option is not required, but perhaps needed:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
query-source-v6 address <ipv6address|*> port <port|*>;
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Per zone defined dedicated IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
It's also possible to define per zone some IPv6 addresses.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Transfer source address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Transfer source address is used for outgoing zone transfers:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
transfer-source-v6 <ipv6addr|*> [port port];
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Notify source address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Notify source address is used for outgoing notify messages:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
notify-source-v6 <ipv6addr|*> [port port];
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 DNS zone files examples
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Some information can be also found at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 DNS Setup Information (article)"
|
|
target "http://www.isi.edu/~bmanning/v6DNS.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Perhaps also helpful is the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Reverse DNS zone builder for BIND 8/9 (webtool)"
|
|
target "http://tools.fpsn.net/ipv6-inaddr/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Serving IPv6 related DNS data
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For IPv6 new types and root zones for reverse lookups are defined:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
AAAA and reverse IP6.INT: specified in
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1886 / DNS Extensions to support IP version 6"
|
|
target "http://www.faqs.org/rfcs/rfc1886.html"
|
|
|
|
\end_inset
|
|
|
|
, usable since BIND version 4.9.6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
A6, DNAME (DEPRECATED NOW!) and reverse IP6.ARPA: specified in
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 2874 / DNS Extensions to Support IPv6 Address Aggregation and Renumbering"
|
|
target "http://www.faqs.org/rfcs/rfc2874.html"
|
|
|
|
\end_inset
|
|
|
|
, usable since BIND 9, but see also an information about the current state
|
|
at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Domain Name System Extension (dnsext)"
|
|
target "http://www.ietf.org/ids.by.wg/dnsext.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Perhaps filled later more content, for the meantime take a look at given
|
|
RFCs and
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
AAAA and reverse IP6.INT:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 DNS Setup Information"
|
|
target "http://www.isi.edu/~bmanning/v6DNS.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
A6, DNAME (DEPRECATED NOW!) and reverse IP6.ARPA: take a look into chapter
|
|
4 and 6 of the BIND 9 Administrator Reference Manual (ARM) distributed
|
|
with the bind-package or get this here:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "BIND manual version 9.3"
|
|
target "http://www.isc.org/sw/bind/arm93/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because IP6.INT is deprecated (but still in use), a DNS server which will
|
|
support IPv6 information has to serve both reverse zones.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Current best practice
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because there are some troubles around using the new formats, current best
|
|
practice is:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Forward lookup support:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
AAAA
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Reverse lookup support:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Reverse nibble format for zone ip6.int (FOR BACKWARD COMPATIBILITY)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Reverse nibble format for zone ip6.arpa (RECOMMENDED)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Checking IPv6-enabled connect
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To check, whether BIND named is listening on an IPv6 socket and serving
|
|
data see following examples.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 connect, but denied by ACL
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Specifying a dedicated server for the query, an IPv6 connect can be forced:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
$ host -t aaaa www.6bone.net 2001:0db8:200:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Using domain server:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Name: 2001:0db8:200:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Address: 2001:0db8:200:f101::1#53
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Aliases:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Host www.6bone.net.
|
|
not found: 5(REFUSED)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Related log entry looks like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 3 12:43:32 gate named[12347]: client
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ 2001:0db8:200:f101:212:34ff:fe12:3456#32770:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
query denied
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If you see such entries in the log, check whether requests from this client
|
|
should be allowed and perhaps review your ACL configuration.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Successful IPv6 connect
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A successful IPv6 connect looks like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
$ host -t aaaa www.6bone.net 2001:0db8:200:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Using domain server:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Name: 2001:0db8:200:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Address: 2001:0db8:200:f101::1#53
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Aliases:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
www.6bone.net.
|
|
is an alias for 6bone.net.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
6bone.net.
|
|
has AAAA address 3ffe:b00:c18:1::10
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-xinetd"
|
|
|
|
\end_inset
|
|
|
|
Internet super daemon (xinetd)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6 is supported since
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "xinetd"
|
|
target "http://www.xinetd.org/"
|
|
|
|
\end_inset
|
|
|
|
version around 1.8.9.
|
|
Always use newest available version.
|
|
At least version 2.3.3 must be used, older versions can contain remote exploitabl
|
|
e security holes.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Some Linux distribution contain an extra package for the IPv6 enabled xinetd,
|
|
some others start the IPv6-enabled xinetd if following variable is set:
|
|
NETWORKING_IPV6="yes", mostly done by /etc/sysconfig/network (only valid
|
|
for Red Hat like distributions).
|
|
In newer releases, one binary supports IPv4 and IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If you enable a built-in service like e.g.
|
|
daytime by modifying the configuration file in /etc/xinetd.d/daytime like
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# diff -u /etc/xinetd.d/daytime.orig /etc/xinetd.d/daytime
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
--- /etc/xinetd.d/daytime.orig Sun Dec 16 19:00:14 2001
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+++ /etc/xinetd.d/daytime Sun Dec 16 19:00:22 2001
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
@@ -10,5 +10,5 @@
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
protocol = tcp
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
user = root
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
wait = no
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
- disable = yes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
+ disable = no
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
After restarting the xinetd you should get a positive result like:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# netstat -lnptu -A inet6 |grep "xinetd*"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 ::ffff:192.168.1.1:993 :::* LISTEN 12345/xinetd-ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 :::13 :::* LISTEN 12345/xinetd-ipv6 <- service
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ daytime/tcp
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 ::ffff:192.168.1.1:143 :::* LISTEN 12345/xinetd-ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Shown example also displays an IMAP and IMAP-SSL IPv4-only listening xinetd.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: earlier versions had a problem that an IPv4-only xinetd won't start
|
|
on an IPv6-enabled node and also the IPv6-enabled xinetd won't start on
|
|
an IPv4-only node.
|
|
This is known to be fixed in later versions, at least version 2.3.11.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-apache2"
|
|
|
|
\end_inset
|
|
|
|
Webserver Apache2 (httpd2)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Apache web server supports IPv6 native by maintainers since 2.0.14.
|
|
Available patches for the older 1.3.x series are not current and shouldn't
|
|
be used in public environment, but available at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "KAME / Misc"
|
|
target "ftp://ftp.kame.net/pub/kame/misc/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Listening on IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: virtual hosts on IPv6 addresses are broken in versions until 2.0.28
|
|
(a patch is available for 2.0.28).
|
|
But always try latest available version first because earlier versions
|
|
had some security issues.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Virtual host listen on an IPv6 address only
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Listen [2001:0db8:100::1]:80
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
<VirtualHost [2001:0db8:100::1]:80>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ServerName ipv6only.yourdomain.yourtopleveldomain
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ...sure more config lines
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
</VirtualHost>
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Virtual host listen on an IPv6 and on an IPv4 address
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Listen [2001:0db8:100::2]:80
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Listen 1.2.3.4:80
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
<VirtualHost [2001:0db8:100::2]:80 1.2.3.4:80>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ServerName ipv6andipv4.yourdomain.yourtopleveldomain
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ...sure more config lines
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
</VirtualHost>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This should result after restart in e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# netstat -lnptu |grep "httpd2
|
|
\backslash
|
|
W*$"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 1.2.3.4:80 0.0.0.0:* LISTEN 12345/httpd2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 2001:0db8:100::1:80 :::* LISTEN 12345/httpd2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tcp 0 0 2001:0db8:100::2:80 :::* LISTEN 12345/httpd2
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For simple tests use the telnet example already shown.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Additional notes
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Apache2 supports a method called
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sendfile
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
to speedup serving data.
|
|
Some NIC drivers also support offline checksumming.
|
|
In some cases, this can lead to connection problems and invalid TCP checksums.
|
|
In this cases, disable
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
sendfile
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
either by recompiling using configure option
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
--without-sendfile
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
or by using the "EnableSendfile off" directive in configuration file.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-radvd"
|
|
|
|
\end_inset
|
|
|
|
Router Advertisement Daemon (radvd)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The router advertisement daemon is very useful on a LAN, if clients should
|
|
be auto-configured.
|
|
The daemon itself should run on the Linux default IPv6 gateway router (it's
|
|
not required that this is also the default IPv4 gateway, so pay attention
|
|
who on your LAN is sending router advertisements).
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You can specify some information and flags which should be contained in
|
|
the advertisement.
|
|
Common used are
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Prefix (needed)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Lifetime of the prefix
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Frequency of sending advertisements (optional)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
After a proper configuration, the daemon sends advertisements through specified
|
|
interfaces and clients are hopefully receive them and auto-magically configure
|
|
addresses with received prefix and the default route.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Configuring radvd
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Simple configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Radvd's config file is normally /etc/radvd.conf.
|
|
An simple example looks like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
interface eth0 {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvSendAdvert on;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MinRtrAdvInterval 3;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MaxRtrAdvInterval 10;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
prefix 2001:0db8:0100:f101::/64 {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvOnLink on;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvAutonomous on;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvRouterAddr on;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This results on client side in
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ip -6 addr show eth0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 2001:0db8:100:f101:2e0:12ff:fe34:1234/64 scope global dynamic
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
valid_lft 2591992sec preferred_lft 604792sec
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 fe80::2e0:12ff:fe34:1234/10 scope link
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because no lifetime was defined, a very high value was used.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Special 6to4 configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Version since 0.6.2pl3 support the automatic (re)-generation of the prefix
|
|
depending on an IPv4 address of a specified interface.
|
|
This can be used to distribute advertisements in a LAN after the 6to4 tunneling
|
|
has changed.
|
|
Mostly used behind a dynamic dial-on-demand Linux router.
|
|
Because of the sure shorter lifetime of such prefix (after each dial-up,
|
|
another prefix is valid), the lifetime configured to minimal values:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
interface eth0 {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvSendAdvert on;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MinRtrAdvInterval 3;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MaxRtrAdvInterval 10;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
prefix 0:0:0:f101::/64 {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvOnLink off;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvAutonomous on;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvRouterAddr on;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Base6to4Interface ppp0;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvPreferredLifetime 20;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvValidLifetime 30;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This results on client side in (assuming, ppp0 has currently 1.2.3.4 as local
|
|
IPv4 address):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 addr show eth0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 2002:0102:0304:f101:2e0:12ff:fe34:1234/64 scope global dynamic
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
valid_lft 22sec preferred_lft 12sec
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inet6 fe80::2e0:12ff:fe34:1234/10 scope link
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Because a small lifetime was defined, such prefix will be thrown away quickly,
|
|
if no related advertisement was received.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Additional note: if you do not used special 6to4 support in initscripts,
|
|
you have to setup a special route on the internal interface on the router,
|
|
otherwise you will get some backrouting problems.
|
|
for the example showh here:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /sbin/ip -6 route add 2002:0102:0304:f101::/64 dev eth0 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This route needs to be replaced every time the prefix changes, which is
|
|
the case after a new IPv4 address was assigned to the dial-up interface.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Debugging
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A program called
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
radvdump
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
can help you looking into sent or received advertisements.
|
|
Simple to use:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# radvdump
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Router advertisement from fe80::280:c8ff:feb9:cef9 (hoplimit 255)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvCurHopLimit: 64
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvManagedFlag: off
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvOtherConfigFlag: off
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvHomeAgentFlag: off
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvReachableTime: 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvRetransTimer: 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Prefix 2002:0102:0304:f101::/64
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvValidLifetime: 30
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvPreferredLifetime: 20
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvOnLink: off
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvAutonomous: on
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvRouterAddr: on
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Prefix 2001:0db8:100:f101::/64
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvValidLifetime: 2592000
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvPreferredLifetime: 604800
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvOnLink: on
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvAutonomous: on
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvRouterAddr: on
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AdvSourceLLAddress: 00 80 12 34 56 78
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Output shows you each advertisement package in readable format.
|
|
You should see your configured values here again, if not, perhaps it's
|
|
not your radvd which sends the advertisement...look for another router on
|
|
the link (and take the LLAddress, which is the MAC address for tracing).
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-dhcpv6"
|
|
|
|
\end_inset
|
|
|
|
Dynamic Host Configuration v6 Server (dhcp6s)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
DHCPv6 can be used for stateful configurations.
|
|
The daemon itself need not necessary run on the Linux default IPv6 gateway
|
|
router.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You can specify more information than by using radvd.
|
|
The are most similar to IPv4 DHCP server.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
After a proper configuration, the daemon reacts on received ICMPv6 multicast
|
|
packets sent by a client to address ff02::1:2
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Configuration of the DHCPv6 server (dhcp6s)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Simple configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
dhcp6s's config file is normally /etc/dhcp6s.conf.
|
|
An simple example looks like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
interface eth0 {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
server-preference 255;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
renew-time 60;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
rebind-time 90;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
prefer-life-time 130;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
valid-life-time 200;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
allow rapid-commit;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
option dns_servers 2001:db8:0:f101::1 sub.domain.example;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
link AAA {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
range 2001:db8:0:f101::1000 to 2001:db8:0:f101::ffff/64;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
prefix 2001:db8:0:f101::/64;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Configuration of the DHCPv6 client (dhcp6c)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Simple configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
dhcp6c's config file is normally /etc/dhcp6c.conf.
|
|
An simple example looks like following:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
interface eth0 {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
send rapid-commit;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
request domain-name-servers;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usage
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dhcpv6_server
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Start server, e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# service dhcp6s start
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dhcpv6_client
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Start client in foreground, e.g.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# dhcp6c -f eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Debugging
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dhcpv6_server
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The server has one foreground and two debug toggles (both should be used
|
|
for debugging), here is an example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# dhcp6s -d -D -f eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dhcpv6_client
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As general debugging for test whether the IPv6 DHCP server is reable on
|
|
the link use an IPv6 ping to the DHCP multicast address:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# ping6 -I eth0 ff02::1:2
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The client has one foreground and two debug toggles, here is an example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# dhcp6c -d -f eth0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:16 dhcpv6 doesn't support hardware type 776
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:16 doesn't support sit0 address family 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:16 netlink_recv_rtgenmsg error
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:16 netlink_recv_rtgenmsg error
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:17 status code for this address is: success
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:17 status code: success
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:17 netlink_recv_rtgenmsg error
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:17 netlink_recv_rtgenmsg error
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:17 assigned address 2001:db8:0:f101::1002 prefix len is
|
|
not
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ in any RAs prefix length using 64 bit instead
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Oct/03/2005 17:18:17 renew time 60, rebind time 9
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note that the netlink error messages have no impact.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-isc-dhcp"
|
|
|
|
\end_inset
|
|
|
|
ISC Dynamic Host Configuration Server (dhcpd)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ISC DHCP supports IPv6 since version 4.x.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Configuration of the ISC DHCP server for IPv6 (dhcpd)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note that currently, the ISC DHCP server can only serve IPv4 or IPv6, means
|
|
you have to start the daemon twice (for IPv6 with option
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
-6
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
) to support both protocols.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Simple configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Create a dedicated configuration file /etc/dhcp/dhcpd6.conf for the IPv6
|
|
part of the dhcpd.
|
|
Note, that the router requires to have a interface configured with an IPv6
|
|
address out of the defined subnet.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default-lease-time 600;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
max-lease-time 7200;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
log-facility local7;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
subnet6 2001:db8:0:1::/64 {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# Range for clients
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
range6 2001:db8:0:1::129 2001:db8:0:1::254;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# Additional options
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
option dhcp6.name-servers fec0:0:0:1::1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
option dhcp6.domain-search "domain.example";
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# Prefix range for delegation to sub-routers
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
prefix6 2001:db8:0:100:: 2001:db8:0:f00:: /56;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# Example for a fixed host address
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
host specialclient {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
host-identifier option dhcp6.client-id 00:01:00:01:4a:1f:ba:e3:60:b9:1f:01:
|
|
23:45;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fixed-address6 2001:db8:0:1::127;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note that the
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
dhcp.client-id
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
no longer belongs to a MAC address, an unique ID is used instead!
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
dhcp6c
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(see above) uses the file /var/lib/dhcpv6/dhcp6c_duid (would be created
|
|
during first start, if not existing) as unique identity.
|
|
It's a 14 byte long identifier, starting with a 2 byte length information
|
|
(usually
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0x000e
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# hexdump -e '"%07.7_ax " 1/2 "%04x" " " 14/1 "%02x:" "
|
|
\backslash
|
|
n"' /var/lib/dhcpv6/dhcp6c_duid 0000000 000e 00:01:00:01:4a:1f:ba:e3:60:b9:1f:01
|
|
:23:45:
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usage
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dhcpd
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Start server in foreground:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# /usr/sbin/dhcpd -6 -f -cf /etc/dhcp/dhcpd.conf eth1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Internet Systems Consortium DHCP Server 4.1.0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Copyright 2004-2008 Internet Systems Consortium.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
All rights reserved.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
For info, please visit http://www.isc.org/sw/dhcp/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not
|
|
specified in the config file
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Wrote 0 leases to leases file.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Bound to *:547
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Listening on Socket/5/eth1/2001:db8:0:1::/64
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Sending on Socket/5/eth1/2001:db8:0:1::/64
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-dibbler"
|
|
|
|
\end_inset
|
|
|
|
DHCP Server Dibbler
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Dibbler is also a DHCP server
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Configuration of the Dibbler DHCP server for IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Simple configuration
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Create a dedicated configuration file /etc/dibbler/server.conf .
|
|
Note, that the router requires to have a interface configured with an IPv6
|
|
address out of the defined subnet.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
log-level 8
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
log-mode short
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
preference 0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
iface "eth1" {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
// also ranges can be defines, instead of exact values t1 1800-2000 t2
|
|
2700-3000
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
prefered-lifetime 3600
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
valid-lifetime 7200
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
class {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pool 2001:6f8:12d8:1::/64
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
option dns-server fec0:0:0:1::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
option domain domain.example
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usage
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dibbler-server
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Start server in foreground:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
# dibbler-server run
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| Dibbler - a portable DHCPv6, version 0.7.3 (SERVER, Linux port)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| Authors : Tomasz Mrugalski<thomson(at)klub.com.pl>,Marek Senderski<msend(at)o2.pl
|
|
>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| Licence : GNU GPL v2 only.
|
|
Developed at Gdansk University of Technology.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| Homepage: http://klub.com.pl/dhcpv6/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2009.05.28 10:18:48 Server Notice My pid (1789) is stored in /var/lib/dibbler/s
|
|
erver.pid
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2009.05.28 10:18:48 Server Notice Detected iface eth0/3, MAC=54:52:00:01:23:45.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2009.05.28 10:18:48 Server Notice Detected iface eth1/2, MAC=54:52:00:67:89:ab.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2009.05.28 10:18:48 Server Notice Detected iface lo/1, MAC=00:00:00:00:00:00.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2009.05.28 10:18:48 Server Debug Skipping database loading.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2009.05.28 10:18:48 Server Debug Cache:server-cache.xml file: parsing started,
|
|
expecting 0 entries.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
2009.05.28 10:18:48 Server Notice Parsing /etc/dibbler/server.conf config
|
|
file...
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Debug Setting 0 generic option(s).
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Debug 0 per-client configurations (exceptions) added.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Debug Parsing /etc/dibbler/server.conf done.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Info 0 client class(es) defined.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Debug 1 interface(s) specified in /etc/dibbler/server.conf
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Info Mapping allow, deny list to class 0:0 allow/deny
|
|
entries in total.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Info Interface eth1/2 configuration has been loaded.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Notice Running in stateful mode.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Info My DUID is 00:01:00:01:11:aa:6d:a7:54:52:00:67:89:ab.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Notice Creating multicast (ff02::1:2) socket on eth1/2 (eth1/2)
|
|
interface.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Debug Cache: size set to 1048576 bytes, 1 cache entry size
|
|
is 87 bytes, so maximum 12052 address-client pair(s) may be cached.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
18:48 Server Notice Accepting connections.
|
|
Next event in 4294967295 second(s).
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-tcpwrapper"
|
|
|
|
\end_inset
|
|
|
|
tcp_wrapper
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
tcp_wrapper is a library which can help you to protect service against misuse.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Filtering capabilities
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
You can use tcp_wrapper for
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Filtering against source addresses (IPv4 or IPv6)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Filtering against users (requires a running ident daemon on the client)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Which program uses tcp_wrapper
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following are known:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Each service which is called by xinetd (if xinetd is compiled using tcp_wrapper
|
|
library)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
sshd (if compiled using tcp_wrapper)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usage
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
tcp_wrapper is controlled by two files name /etc/hosts.allow and /etc/hosts.deny.
|
|
For more information see
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
$ man hosts.allow
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Example for /etc/hosts.allow
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In this file, each service which should be positive filtered (means connects
|
|
are accepted) need a line.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sshd: 1.2.3.
|
|
[2001:0db8:100:200::]/64
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
daytime-stream: 1.2.3.
|
|
[2001:0db8:100:200::]/64
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: there are broken implementations around, which uses following broken
|
|
IPv6 network description: [2001:0db8:100:200::/64].
|
|
Hopefully, such versions will be fixed soon.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Example for /etc/hosts.deny
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This file contains all negative filter entries and should normally deny
|
|
the rest using
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ALL: ALL
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If this node is a more sensible one you can replace the standard line above
|
|
with this one, but this can cause a DoS attack (load of mailer and spool
|
|
directory), if too many connects were made in short time.
|
|
Perhaps a logwatch is better for such issues.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ALL: ALL: spawn (echo "Attempt from %h %a to %d at `date`"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
| tee -a /var/log/tcp.deny.log | mail root@localhost)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Logging
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Depending on the entry in the syslog daemon configuration file /etc/syslog.conf
|
|
the tcp_wrapper logs normally into /var/log/secure.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Refused connection
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A refused connection via IPv4 to an xinetd covered daytime service produces
|
|
a line like following example
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:40:44 gate xinetd-ipv6[12346]: FAIL: daytime-stream libwrap
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ from=::ffff:1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:32:06 gate xinetd-ipv6[12346]: FAIL: daytime-stream libwrap
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
from=2001:0db8:100:200::212:34ff:fe12:3456
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A refused connection via IPv4 to an dual-listen sshd produces a line like
|
|
following example
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:24:17 gate sshd[12345]: refused connect from ::ffff:1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ (::ffff:1.2.3.4)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:39:33 gate sshd[12345]: refused connect
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
from 2001:0db8:100:200::212:34ff:fe12:3456
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ (2001:0db8:100:200::212:34ff:fe12:3456)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Permitted connection
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A permitted connection via IPv4 to an xinetd covered daytime service produces
|
|
a line like following example
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:37:50 gate xinetd-ipv6[12346]: START: daytime-stream pid=0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ from=::ffff:1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:37:56 gate xinetd-ipv6[12346]: START: daytime-stream pid=0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
from=2001:0db8:100:200::212:34ff:fe12:3456
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A permitted connection via IPv4 to an dual-listen sshd produces a line like
|
|
following example
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:43:10 gate sshd[21975]: Accepted password for user from ::ffff:1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ port 33381 ssh2
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Jan 2 20:42:19 gate sshd[12345]: Accepted password for user
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
from 2001:0db8:100:200::212:34ff:fe12:3456 port 33380 ssh2
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-vsftpd"
|
|
|
|
\end_inset
|
|
|
|
vsftpd
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Listening on IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Edit the configuration file, ususally /etc/vsftpd/vsftpd.conf, and adjust
|
|
the listen option like
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
listen_ipv6=yes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
That's all.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-proftpd"
|
|
|
|
\end_inset
|
|
|
|
proftpd
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Listening on IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Edit the configuration file, ususally /etc/proftpd.conf, but take care, not
|
|
100% logical in virtual host setup
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
<VirtualHost 192.0.2.1>
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
...
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Bind 2001:0DB8::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
...
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
</VirtualHost>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
That's all.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "hints-daemons-others"
|
|
|
|
\end_inset
|
|
|
|
Other daemons
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nowadays it's mostly simple, look for either a command line option or a
|
|
configuration value to enable IPv6 listening.
|
|
See manual page of the daemon or check related FAQs.
|
|
It can happen that you can bind a daemon only to the IPv6-
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
any
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
-address (::) and not to bind to a dedicated IPv6 address, because the lack
|
|
of support (depends on that what the programmer has implemented so far...).
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-programming"
|
|
|
|
\end_inset
|
|
|
|
Programming
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-section-using-API"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-programming-using-API"
|
|
|
|
\end_inset
|
|
|
|
Programming using C-API
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Related RFCs:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3493 / Basic Socket Interface Extensions for IPv6"
|
|
target "http://www.faqs.org/rfcs/rfc3493.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3542 / Advanced Sockets Application Program Interface (API) for IPv6"
|
|
target "http://www.faqs.org/rfcs/rfc3542.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following contents of this section is contributed by John Wenker, Sr.
|
|
Software Engineer Performance Technologies San Diego, CA USA
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.pt.com/"
|
|
target "http://www.pt.com/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset VSpace defskip
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This section describes how to write IPv6 client-server applications under
|
|
the Linux operating system.
|
|
First thing's first, and credit must be given where it is due.
|
|
The information contained in this section is derived from Chapters 2 through
|
|
4 of IPv6 Network Programming by Jun-ichiro itojun Hagino (ISBN 1-55558-318-0).
|
|
The reader is encouraged to consult that book for more detailed information.
|
|
It describes how to convert IPv4 applications to be IPv6 compatible in
|
|
a protocol-independent way, and describes some of the common
|
|
\bar under
|
|
problems
|
|
\bar default
|
|
encountered during the conversion along with suggested solutions.
|
|
At the time of this writing, this is the only book of which the author
|
|
is aware that specifically addresses how to program IPv6 applications [since
|
|
writing this section, the author has also become aware of the Porting applicati
|
|
ons to IPv6 HowTo by Eva M.
|
|
Castro at
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://jungla.dit.upm.es/~ecastro/IPv6-web/ipv6.html"
|
|
target "http://jungla.dit.upm.es/~ecastro/IPv6-web/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
].
|
|
Unfortunately, of the almost 360 pages in the book, maybe 60 are actually
|
|
useful (the chapters mentioned).
|
|
Nevertheless, without the guidance of that book, the author would have
|
|
been unable to perform his job duties or compose this HowTo.
|
|
While most (but certainly not all) of the information in the Hagino book
|
|
is available via the Linux 'man' pages, application programmers will save
|
|
a significant amount of time and frustration by reading the indicated chapters
|
|
of the book rather than searching through the 'man' pages and online documentat
|
|
ion.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Other than the Hagino book, any other information presented in this HowTo
|
|
was obtained through trial and error.
|
|
Some items or explanations may not be entirely
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
correct
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
in the grand IPv6 scheme, but seem to work in practical application.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The discussion that follows assumes the reader is already experienced with
|
|
the traditional TCP/IP socket API.
|
|
For more information on traditional socket programming, the Internetworking
|
|
with TCP/IP series of textbooks by Comer & Stevens is hard to beat, specificall
|
|
y Volume III: Client-Server Programming and Applications, Linux/POSIX Sockets
|
|
Version (ISBN 0-13-032071-4).
|
|
This HowTo also assumes that the reader has had at least a bare basic introduct
|
|
ion to IPv6 and in particular the addressing scheme for network addresses
|
|
(see Section 2.3).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Address Structures
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
This section provides a brief overview of the structures provided in the
|
|
socket API to represent network addresses (or more specifically transport
|
|
endpoints) when using the Internet protocols in a client-server application.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv4 sockaddr_in
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
In IPv4, network addresses are 32 bits long and define a network node.
|
|
Addresses are written in dotted decimal notation, such as 192.0.2.1, where
|
|
each number represents eight bits of the address.
|
|
Such an IPv4 address is represented by the
|
|
\family typewriter
|
|
struct sockaddr_in
|
|
\family default
|
|
data type, which is defined in
|
|
\family typewriter
|
|
<netinet/in.h>
|
|
\family default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sa_family_t sin_family;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
in_port_t sin_port;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct in_addr sin_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/* Plus some padding for alignment */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
sin_family
|
|
\family default
|
|
component indicates the address family.
|
|
For IPv4 addresses, this is always set to
|
|
\family typewriter
|
|
AF_INET
|
|
\family default
|
|
.
|
|
The
|
|
\family typewriter
|
|
sin_addr
|
|
\family default
|
|
field contains the 32-bit network address (in network byte order).
|
|
Finally, the
|
|
\family typewriter
|
|
sin_port
|
|
\family default
|
|
component represents the transport layer port number (in network byte order).
|
|
Readers should already be familiar with this structure, as this is the
|
|
standard IPv4 address structure.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 sockaddr_in6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The biggest feature of IPv6 is its increased address space.
|
|
Instead of 32-bit network addresses, IPv6 allots 128 bits to an address.
|
|
Addresses are written in colon-hex notation of the form fe80::2c0:8cff:fe01:234
|
|
5, where each hex number separated by colons represents 16 bits of the address.
|
|
Two consecutive colons indicate a string of consecutive zeros for brevity,
|
|
and at most only one double-colon may appear in the address.
|
|
IPv6 addresses are represented by the
|
|
\family typewriter
|
|
struct sockaddr_in6
|
|
\family default
|
|
data type, also defined in
|
|
\family typewriter
|
|
<netinet/in.h>
|
|
\family default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sa_family_t sin6_family;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
in_port_t sin6_port;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
uint32_t sin6_flowinfo;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct in6_addr sin6_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
uint32_t sin6_scope_id;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
sin6_family
|
|
\family default
|
|
,
|
|
\family typewriter
|
|
sin6_port
|
|
\family default
|
|
, and
|
|
\family typewriter
|
|
sin6_addr
|
|
\family default
|
|
components of the structure have the same meaning as the corresponding
|
|
fields in the
|
|
\family typewriter
|
|
sockaddr_in
|
|
\family default
|
|
structure.
|
|
However, the
|
|
\family typewriter
|
|
sin6_family
|
|
\family default
|
|
member is set to
|
|
\family typewriter
|
|
AF_INET6
|
|
\family default
|
|
for IPv6 addresses, and the
|
|
\family typewriter
|
|
sin6_addr
|
|
\family default
|
|
field holds a 128-bit address instead of only 32 bits.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
sin6_flowinfo
|
|
\family default
|
|
field is used for flow control, but is not yet standardized and can be
|
|
ignored.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
sin6_scope_id
|
|
\family default
|
|
field has an odd use, and it seems (at least to this naïve author) that
|
|
the IPv6 designers took a huge step backwards when devising this.
|
|
Apparently, 128-bit IPv6 network addresses are not unique.
|
|
For example, it is possible to have two hosts, on separate networks, with
|
|
the same link-local address (see Figure 1).
|
|
In order to pass information to a specific host, more than just the network
|
|
address is required; the scope identifier must also be specified.
|
|
In Linux, the network interface name is used for the scope identifier (e.g.
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
eth0
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
) [be warned that the scope identifier is implementation dependent!].
|
|
Use the
|
|
\family typewriter
|
|
ifconfig(1M)
|
|
\family default
|
|
command to display a list of active network interfaces.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A colon-hex network address can be augmented with the scope identifier to
|
|
produce a "scoped address
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
.
|
|
The percent sign ('%') is used to delimit the network address from the
|
|
scope identifier.
|
|
For example,
|
|
\family typewriter
|
|
fe80::1%eth0
|
|
\family default
|
|
is a scoped IPv6 address where
|
|
\family typewriter
|
|
fe80::1
|
|
\family default
|
|
represents the 128-bit network address and
|
|
\family typewriter
|
|
eth0
|
|
\family default
|
|
is the network interface (i.e.
|
|
the scope identifier).
|
|
Thus, if a host resides on two networks, such as Host B in example below,
|
|
the user now has to know which path to take in order to get to a particular
|
|
host.
|
|
In Figure 1, Host B addresses Host A using the scoped address
|
|
\family typewriter
|
|
fe80::1%eth0
|
|
\family default
|
|
, while Host C is addressed with
|
|
\family typewriter
|
|
fe80::1%eth1
|
|
\family default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
Host A (fe80::1) ---- eth0 ---- Host B ---- eth1 ---- Host C (fe80::1)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Getting back to the
|
|
\family typewriter
|
|
sockaddr_in6
|
|
\family default
|
|
structure, its
|
|
\family typewriter
|
|
sin6_scope_id
|
|
\family default
|
|
field contains the index of the network interface on which a host may be
|
|
found.
|
|
Server applications will have this field set automatically by the socket
|
|
API when they accept a connection or receive a datagram.
|
|
For client applications, if a scoped address is passed as the node parameter
|
|
to
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
(described later in this HowTo), then the
|
|
\family typewriter
|
|
sin6_scope_id
|
|
\family default
|
|
field will be filled in correctly by the system upon return from the function;
|
|
if a scoped address is not supplied, then the sin6_scope_id field must
|
|
be explicitly set by the client software prior to attempting to communicate
|
|
with the remote server.
|
|
The
|
|
\family typewriter
|
|
if_nametoindex(3)
|
|
\family default
|
|
function is used to translate a network interface name into its corresponding
|
|
index.
|
|
It is declared in
|
|
\family typewriter
|
|
<net/if.h>
|
|
\family default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Generic Addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As any programmer familiar with the traditional TCP/IP socket API knows,
|
|
several socket functions deal with "generic" pointers.
|
|
For example, a pointer to a generic
|
|
\family typewriter
|
|
struct sockaddr
|
|
\family default
|
|
data type is passed as a parameter to some socket functions (such as
|
|
\family typewriter
|
|
connect(2)
|
|
\family default
|
|
or
|
|
\family typewriter
|
|
bind(2)
|
|
\family default
|
|
) rather than a pointer to a specific address type.
|
|
Be careful\SpecialChar \ldots{}
|
|
the
|
|
\family typewriter
|
|
sockaddr_in6
|
|
\family default
|
|
structure is larger than the generic
|
|
\family typewriter
|
|
sockaddr
|
|
\family default
|
|
structure! Thus, if your program
|
|
\bar under
|
|
receives
|
|
\bar default
|
|
a generic address whose actual type is unknown (e.g.
|
|
it could be an IPv4 address structure or an IPv6 address structure), you
|
|
must supply sufficient storage to hold the entire address.
|
|
The
|
|
\family typewriter
|
|
struct sockaddr_storage
|
|
\family default
|
|
data type is defined in
|
|
\family typewriter
|
|
<bits/socket.h>
|
|
\family default
|
|
for this purpose [do not #include this file directly within an application;
|
|
use
|
|
\family typewriter
|
|
<sys/socket.h>
|
|
\family default
|
|
as usual, and
|
|
\family typewriter
|
|
<bits/socket.h>
|
|
\family default
|
|
will be implicitly included].
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For example, consider the
|
|
\family typewriter
|
|
recvfrom(2)
|
|
\family default
|
|
system call, which is used to receive a message from a remote peer.
|
|
Its function prototype is:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ssize_t recvfrom( int s,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
void *buf,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t len,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int flags,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr *from,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
socklen_t *fromlen );
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The from parameter points to a generic
|
|
\family typewriter
|
|
sockaddr
|
|
\family default
|
|
structure.
|
|
If data can be received from an IPv6 peer on the socket referenced by
|
|
\family typewriter
|
|
s
|
|
\family default
|
|
, then
|
|
\family typewriter
|
|
from
|
|
\family default
|
|
should point to a data type of
|
|
\family typewriter
|
|
struct sockaddr_storage
|
|
\family default
|
|
, as in the following dummy example:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Read a message from a remote peer, and return a buffer pointer to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the caller.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
**
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 's' is the file descriptor for the socket.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *rcvMsg( int s )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static char bfr[ 1025 ]; /* Where the msg is stored.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ssize_t count;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_storage ss; /* Where the peer adr goes.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
socklen_t sslen;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sslen = sizeof( ss );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
count = recvfrom( s,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
bfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( bfr ) - 1,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
(struct sockaddr*) &ss,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&sslen );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
bfr[ count ] = '
|
|
\backslash
|
|
0'; /* Null-terminates the message.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return bfr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End rcvMsg() */
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As seen in the above example,
|
|
\family typewriter
|
|
ss
|
|
\family default
|
|
(a
|
|
\family typewriter
|
|
struct sockaddr_storage
|
|
\family default
|
|
data object) is used to receive the peer address information, but it's
|
|
address is typecast to a generic
|
|
\family typewriter
|
|
struct sockaddr*
|
|
\family default
|
|
pointer in the call to
|
|
\family typewriter
|
|
recvfrom(2)
|
|
\family default
|
|
.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Lookup Functions
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Traditionally, hostname and service name resolution were performed by functions
|
|
such as
|
|
\family typewriter
|
|
gethostbyname(3)
|
|
\family default
|
|
and
|
|
\family typewriter
|
|
getservbyname(3)
|
|
\family default
|
|
.
|
|
These traditional lookup functions are still available, but they are not
|
|
forward compatible to IPv6.
|
|
Instead, the IPv6 socket API provides new lookup functions that consolidate
|
|
the functionality of several traditional functions.
|
|
These new lookup functions are also backward compatible with IPv4, so a
|
|
programmer can use the same translation algorithm in an application for
|
|
both the IPv4 and IPv6 protocols.
|
|
This is an important feature, because obviously a global IPv6 infrastructure
|
|
isn't going to be put in place overnight.
|
|
Thus, during the transition period from IPv4 to IPv6, client-server application
|
|
s should be designed with the flexibility to handle both protocols simultaneousl
|
|
y.
|
|
The example programs at the end of this chapter do just that.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The primary lookup function in the new socket API is
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
.
|
|
Its prototype is as follows.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int getaddrinfo( const char *node,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const struct addrinfo *hints,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo **res );
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The node parameter is a pointer to the hostname or IP address being translated.
|
|
The referenced string can be a hostname, IPv4 dotted decimal address, or
|
|
IPv6 colon-hex address (possibly scoped).
|
|
The
|
|
\family typewriter
|
|
service
|
|
\family default
|
|
parameter is a pointer to the transport layer's service name or port number.
|
|
It can be specified as a name found in
|
|
\family typewriter
|
|
/etc/services
|
|
\family default
|
|
or a decimal number.
|
|
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
resolves the host/service combination and returns a
|
|
\bar under
|
|
list
|
|
\bar default
|
|
of address records; a pointer to the list is placed in the location pointed
|
|
at by
|
|
\family typewriter
|
|
res
|
|
\family default
|
|
.
|
|
For example, suppose a host can be identified by both an IPv4 and IPv6
|
|
address, and that the indicated service has both a TCP entry and UDP entry
|
|
in
|
|
\family typewriter
|
|
/etc/services
|
|
\family default
|
|
.
|
|
In such a scenario, it is not inconceivable that four address records are
|
|
returned; one for TCP/IPv6, one for UDP/IPv6, one for TCP/IPv4, and one
|
|
for UDP/IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The definition for
|
|
\family typewriter
|
|
struct addrinfo
|
|
\family default
|
|
is found in
|
|
\family typewriter
|
|
<netdb.h>
|
|
\family default
|
|
(as is the declaration for getaddrinfo(3) and the other functions described
|
|
in this section).
|
|
The structure has the following format:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int ai_flags;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int ai_family;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int ai_socktype;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int ai_protocol;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
socklen_t ai_addrlen;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr *ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *ai_canonname;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo *ai_next;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
};
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Consult the 'man' page for
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
for detailed information about the various fields; this HowTo only describes
|
|
a subset of them, and only to the extent necessary for normal IPv6 programming.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
ai_family
|
|
\family default
|
|
,
|
|
\family typewriter
|
|
ai_socktype
|
|
\family default
|
|
, and
|
|
\family typewriter
|
|
ai_protocol
|
|
\family default
|
|
fields have the exact same meaning as the parameters to the
|
|
\family typewriter
|
|
socket(2)
|
|
\family default
|
|
system call.
|
|
The
|
|
\family typewriter
|
|
ai_family
|
|
\family default
|
|
field indicates the
|
|
\bar under
|
|
protocol
|
|
\bar default
|
|
family (not the address family) associated with the record, and will be
|
|
|
|
\family typewriter
|
|
PF_INET6
|
|
\family default
|
|
for IPv6 or
|
|
\family typewriter
|
|
PF_INET
|
|
\family default
|
|
for IPv4.
|
|
The
|
|
\family typewriter
|
|
ai_socktype
|
|
\family default
|
|
parameter indicates the type of socket to which the record corresponds;
|
|
|
|
\family typewriter
|
|
SOCK_STREAM
|
|
\family default
|
|
for a reliable connection-oriented byte-stream or
|
|
\family typewriter
|
|
SOCK_DGRAM
|
|
\family default
|
|
for connectionless communication.
|
|
The
|
|
\family typewriter
|
|
ai_protocol
|
|
\family default
|
|
field specifies the underlying transport protocol for the record.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
ai_addr
|
|
\family default
|
|
field points to a generic
|
|
\family typewriter
|
|
struct sockaddr
|
|
\family default
|
|
object.
|
|
Depending on the value in the
|
|
\family typewriter
|
|
ai_family
|
|
\family default
|
|
field, it will point to either a
|
|
\family typewriter
|
|
struct sockaddr_in
|
|
\family default
|
|
(
|
|
\family typewriter
|
|
PF_INET
|
|
\family default
|
|
) or a
|
|
\family typewriter
|
|
struct sockaddr_in6
|
|
\family default
|
|
(
|
|
\family typewriter
|
|
PF_INET6
|
|
\family default
|
|
).
|
|
The
|
|
\family typewriter
|
|
ai_addrlen
|
|
\family default
|
|
field contains the size of the object pointed at by the
|
|
\family typewriter
|
|
ai_addr
|
|
\family default
|
|
field.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As mentioned,
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
returns a list of address records.
|
|
The
|
|
\family typewriter
|
|
ai_next
|
|
\family default
|
|
field points to the next record in the list.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
hints
|
|
\family default
|
|
parameter to
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
is also of type
|
|
\family typewriter
|
|
struct addrinfo
|
|
\family default
|
|
and acts as a filter for the address records returned in
|
|
\family typewriter
|
|
res
|
|
\family default
|
|
.
|
|
If
|
|
\family typewriter
|
|
hints
|
|
\family default
|
|
is
|
|
\family typewriter
|
|
NULL
|
|
\family default
|
|
, all matching records are returned; but if
|
|
\family typewriter
|
|
hints
|
|
\family default
|
|
is non-
|
|
\family typewriter
|
|
NULL
|
|
\family default
|
|
, the referenced structure gives "hints" to
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
about which records to return.
|
|
Only the
|
|
\family typewriter
|
|
ai_flags
|
|
\family default
|
|
,
|
|
\family typewriter
|
|
ai_family
|
|
\family default
|
|
,
|
|
\family typewriter
|
|
ai_socktype
|
|
\family default
|
|
, and
|
|
\family typewriter
|
|
ai_protocol
|
|
\family default
|
|
fields are significant in the
|
|
\family typewriter
|
|
hints
|
|
\family default
|
|
structure, and all other fields should be set to zero.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Programs can use
|
|
\family typewriter
|
|
hints->ai_family
|
|
\family default
|
|
to specify the protocol family.
|
|
For example, if it is set to
|
|
\family typewriter
|
|
PF_INET6
|
|
\family default
|
|
, then only IPv6 address records are returned.
|
|
Likewise, setting
|
|
\family typewriter
|
|
hints->ai_family
|
|
\family default
|
|
to
|
|
\family typewriter
|
|
PF_INET
|
|
\family default
|
|
results in only IPv4 address records being returned.
|
|
If an application wants both IPv4 and IPv6 records, the field should be
|
|
set to
|
|
\family typewriter
|
|
PF_UNSPEC
|
|
\family default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
hints->socktype
|
|
\family default
|
|
field can be set to
|
|
\family typewriter
|
|
SOCK_STREAM
|
|
\family default
|
|
to return only records that correspond to connection-oriented byte streams,
|
|
|
|
\family typewriter
|
|
SOCK_DGRAM
|
|
\family default
|
|
to return only records corresponding to connectionless communication, or
|
|
|
|
\family typewriter
|
|
0
|
|
\family default
|
|
to return both.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For the Internet protocols, there is only one protocol associated with connectio
|
|
n-oriented sockets (TCP) and one protocol associated with connectionless
|
|
sockets (UDP), so setting
|
|
\family typewriter
|
|
hints->ai_socktype
|
|
\family default
|
|
to
|
|
\family typewriter
|
|
SOCK_STREAM
|
|
\family default
|
|
or
|
|
\family typewriter
|
|
SOCK_DGRAM
|
|
\family default
|
|
is the same as saying, "Give me only TCP records," or "Give me only UDP
|
|
records," respectively.
|
|
With that in mind, the
|
|
\family typewriter
|
|
hints->ai_protocol
|
|
\family default
|
|
field isn't really that important with the Internet protocols, and pretty
|
|
much mirrors the
|
|
\family typewriter
|
|
hints->ai_socktype
|
|
\family default
|
|
field.
|
|
Nevertheless,
|
|
\family typewriter
|
|
hints->ai_protocol
|
|
\family default
|
|
can be set to
|
|
\family typewriter
|
|
IPPROTO_TCP
|
|
\family default
|
|
to return only TCP records,
|
|
\family typewriter
|
|
IPPROTO_UDP
|
|
\family default
|
|
to return only UDP records, or
|
|
\family typewriter
|
|
0
|
|
\family default
|
|
for both.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
node
|
|
\family default
|
|
or
|
|
\family typewriter
|
|
service
|
|
\family default
|
|
parameter to
|
|
\family typewriter
|
|
gethostbyname(3)
|
|
\family default
|
|
can be
|
|
\family typewriter
|
|
NULL
|
|
\family default
|
|
, but not both.
|
|
If
|
|
\family typewriter
|
|
node
|
|
\family default
|
|
is
|
|
\family typewriter
|
|
NULL
|
|
\family default
|
|
, then the
|
|
\family typewriter
|
|
ai_flags field
|
|
\family default
|
|
of the
|
|
\family typewriter
|
|
hints
|
|
\family default
|
|
parameter specifies how the network address in a returned record is set
|
|
(i.e.
|
|
the
|
|
\family typewriter
|
|
sin_addr
|
|
\family default
|
|
or
|
|
\family typewriter
|
|
sin6_addr
|
|
\family default
|
|
field of the object pointed at by the
|
|
\family typewriter
|
|
ai_addr
|
|
\family default
|
|
component in a returned record).
|
|
If the
|
|
\family typewriter
|
|
AI_PASSIVE
|
|
\family default
|
|
flag is set in
|
|
\family typewriter
|
|
hints
|
|
\family default
|
|
, then the returned network addresses are left unresolved (all zeros).
|
|
This is how server applications would use
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
.
|
|
If the flag is not set, then the address is set to the local loopback address
|
|
(::1 for IPv6 or 127.0.0.1 for IPv4).
|
|
This is one way a client application can specify that the target server
|
|
is running on the same machine as the client.
|
|
If the
|
|
\family typewriter
|
|
service
|
|
\family default
|
|
parameter is
|
|
\family typewriter
|
|
NULL
|
|
\family default
|
|
, the port number in the returned address records remains unresolved.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
function returns zero on success, or an error code.
|
|
In the case of an error, the
|
|
\family typewriter
|
|
gai_strerror(3)
|
|
\family default
|
|
function is used to obtain a character pointer to an error message correspondin
|
|
g to the error code, just like
|
|
\family typewriter
|
|
strerror(3)
|
|
\family default
|
|
does in the standard 'C' library.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Once the address list is no longer needed, it must be freed by the application.
|
|
This is done with the
|
|
\family typewriter
|
|
freeaddrinfo(3)
|
|
\family default
|
|
function.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The last function that will be mentioned in this section is
|
|
\family typewriter
|
|
getnameinfo(3)
|
|
\family default
|
|
.
|
|
This function is the inverse of
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
; it is used to create a string representation of the hostname and service
|
|
from a generic
|
|
\family typewriter
|
|
struct sockaddr
|
|
\family default
|
|
data object.
|
|
It has the following prototype.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int getnameinfo( const struct sockaddr *sa,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
socklen_t salen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t hostlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *serv,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t servlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int flags );
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\family typewriter
|
|
sa
|
|
\family default
|
|
parameter points to the address structure in question, and
|
|
\family typewriter
|
|
salen
|
|
\family default
|
|
contains its size.
|
|
The
|
|
\family typewriter
|
|
host
|
|
\family default
|
|
parameter points to a buffer where the null-terminated hostname string
|
|
is placed, and the hostlen parameter is the size of that buffer.
|
|
If there is no hostname that corresponds to the address, then the network
|
|
address (dotted decimal or colon-hex) is placed in
|
|
\family typewriter
|
|
host
|
|
\family default
|
|
.
|
|
Likewise, the
|
|
\family typewriter
|
|
serv
|
|
\family default
|
|
parameter points to a buffer where the null-terminated service name string
|
|
(or port number) is placed, and the
|
|
\family typewriter
|
|
servlen
|
|
\family default
|
|
parameter is the size of that buffer.
|
|
The
|
|
\family typewriter
|
|
flags
|
|
\family default
|
|
parameter modifies the function's behavior; in particular, the
|
|
\family typewriter
|
|
NI_NUMERICHOST
|
|
\family default
|
|
flag indicates that the converted hostname should always be formatted in
|
|
numeric form (i.e.
|
|
dotted decimal or colon-hex), and the
|
|
\family typewriter
|
|
NI_NUMERICSERV
|
|
\family default
|
|
flag indicates that the converted service should always be in numeric form
|
|
(i.e.
|
|
the port number).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The symbols
|
|
\family typewriter
|
|
NI_MAXHOST
|
|
\family default
|
|
and
|
|
\family typewriter
|
|
NI_MAXSERV
|
|
\family default
|
|
are available to applications and represent the maximum size of any converted
|
|
hostname or service name, respectively.
|
|
Use these when declaring output buffers for
|
|
\family typewriter
|
|
getnameinfo(3)
|
|
\family default
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Quirks Encountered
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Before jumping into the programming examples, there are several quirks in
|
|
IPv6 of which the reader should be aware.
|
|
The more significant ones (in addition to the non-uniqueness of IPv6 network
|
|
addresses already discussed) are described in the paragraphs below.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv4 Mapped Addresses
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For security reasons that this author won't pretend to understand, "IPv4
|
|
mapped addresses" should not be allowed in IPv6-capable server applications.
|
|
To put it in terms that everyone can understand, this simply means that
|
|
a server should not accept IPv4 traffic on an IPv6 socket (an otherwise
|
|
legal operation).
|
|
An IPv4 mapped address is a mixed-format address of the form:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::ffff:192.0.2.1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
where the first portion is in IPv6 colon-hex format and the last portion
|
|
is in IPv4 dotted decimal notation.
|
|
The dotted decimal IPv4 address is the actual network address, but it is
|
|
being mapped into an IPv6 compatible format.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
To prevent IPv4 mapped addresses from being accepted on an IPv6 socket,
|
|
server applications must explicitly set the
|
|
\family typewriter
|
|
IPV6_V6ONLY
|
|
\family default
|
|
socket option on all IPv6 sockets created [the Hagino book implies that
|
|
this is only a concern with server applications.
|
|
However, it has been observed during testing that if a client application
|
|
uses an IPv4 mapped address to specify the target server, and the target
|
|
server has IPv4 mapped addresses disabled, the connection still completes
|
|
regardless.
|
|
On the server side, the connection endpoint is an IPv4 socket as desired;
|
|
but on the client side, the connection endpoint is an IPv6 socket.
|
|
Setting the IPV6_V6ONLY socket option on the client side as well as the
|
|
server side prevents any connection from being established at all.].
|
|
There's only one problem.
|
|
Apparently,
|
|
\family typewriter
|
|
IPV6_V6ONLY
|
|
\family default
|
|
isn't defined on all systems [or at least it wasn't in 2005 when the Hagino
|
|
book was written].
|
|
The server example at the end of this chapter provides a method for handling
|
|
this problem.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If IPv4 traffic cannot be handled on IPv6 sockets, then that implies that
|
|
server applications must open both an IPv4 and IPv6 socket for a particular
|
|
network service if it wants to handle requests from either protocol.
|
|
This goes back to the flexibility issue mentioned earlier.
|
|
If
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
returns multiple address records, then server applications should traverse
|
|
the list and open a passive socket for each address provided.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Cannot Specify the Scope Identifier in /etc/hosts
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
It is possible to assign a hostname to an IPv6 network address in
|
|
\family typewriter
|
|
/etc/hosts
|
|
\family default
|
|
.
|
|
For example, the following is an excerpt from the
|
|
\family typewriter
|
|
/etc/hosts
|
|
\family default
|
|
file on the author's development system.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
::1 localhost
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
127.0.0.1 localhost
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fe80::2c0:8cff:fe01:2345 pt141
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
192.0.2.1 pt141
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The "localhost" and "pt141" hostnames can be translated to either an IPv4
|
|
or IPv6 network address.
|
|
So, for example, if "pt141" is passed as the node parameter to
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
, the function returns both an IPv4 and IPv6 address record for the host
|
|
(assuming the behavior hasn't been modified by the hints parameter).
|
|
Unfortunately, a scoped address cannot be used in
|
|
\family typewriter
|
|
/etc/hosts
|
|
\family default
|
|
.
|
|
Doing so results in
|
|
\family typewriter
|
|
getaddrinfo(3)
|
|
\family default
|
|
returning only the IPv4 record.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Client & Server Residing on the Same Machine
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Suppose a machine has the IPv4 address 192.0.2.1.
|
|
A client application running on that machine can connect to a server applicatio
|
|
n on the same machine by using either the local loopback address (127.0.0.1)
|
|
or the network address (192.0.2.1) as the target server.
|
|
Much to this author's surprise (and dismay), it turns out that an IPv6
|
|
client application cannot connect to a server application on the same machine
|
|
if it uses the network address of that machine as the target; it must use
|
|
the local loopback address (::1).
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Putting It All Together (A Client-Server Programming Example)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Now it's time to put everything discussed thus far together into a sample
|
|
client-server application.
|
|
The remainder of this section is devoted to a remote time-of-day application
|
|
(the 'daytime' Internet service) [I noticed that Ms.
|
|
Castro used a 'daytime' example in her
|
|
\emph on
|
|
Porting applications to IPv6 HowTo
|
|
\emph default
|
|
.
|
|
For the record, the source code presented here is original, developed from
|
|
scratch, and any similarity between it and any other publicly available
|
|
'daytime' example is purely coincidental.].
|
|
The source code presented in this section was developed and tested on a
|
|
RedHat Linux release using the 2.6 kernel (2.6.9 to be specific).
|
|
Readers may use the source code freely, so long as proper credit is attributed;
|
|
but of course the standard disclaimer must be given first:
|
|
\end_layout
|
|
|
|
\begin_layout Quotation
|
|
Although the sample source code is believed to be free of errors, the author
|
|
makes no guarantees as to its reliability, especially considering that
|
|
some error paths were intentionally omitted for brevity.
|
|
Use it at your own risk!
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
When you get right down to it, there really aren't that many differences
|
|
between IPv4 and IPv6 applications.
|
|
The trick is to code IPv6 applications in a protocol-independent manner,
|
|
such that they can handle both IPv4 and IPv6 simultaneously and transparently.
|
|
This sample application does just that.
|
|
The only protocol-dependent code in the example occurs when printing network
|
|
addresses in verbose mode; but only
|
|
\bar under
|
|
after
|
|
\bar default
|
|
the
|
|
\family typewriter
|
|
ai_family field
|
|
\family default
|
|
in the
|
|
\family typewriter
|
|
addrinfo
|
|
\family default
|
|
structure has been checked, so the programs know exactly what type of address
|
|
they're handling at the time.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
'Daytime' Server Code
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The server code is found in file tod6d.c (time-of-day IPv6 daemon).
|
|
Once built, the server may be started using the following command syntax
|
|
(assuming tod6d is the executable file):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tod6d [-v] [service]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ARGUMENTS:
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
service The service (or well-known port) on which to listen.
|
|
Default is "daytime".
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
OPTIONS:
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
-v Turn on verbose mode.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The server handles both TCP and UDP requests on the network.
|
|
The server source code contained in tod6d.c follows:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* File: tod6d.c
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description: Contains source code for an IPv6-capable 'daytime' server.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Author: John Wenker, Sr.
|
|
Software Engineer,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Performance Technologies, San Diego, USA
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** System header files.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <errno.h> /* errno declaration & error codes.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <netdb.h> /* getaddrinfo(3) et al.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <netinet/in.h> /* sockaddr_in & sockaddr_in6 definition.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <stdio.h> /* printf(3) et al.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <stdlib.h> /* exit(2).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <string.h> /* String manipulation & memory functions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <sys/poll.h> /* poll(2) and related definitions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <sys/socket.h> /* Socket functions (socket(2), bind(2), etc).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <time.h> /* time(2) & ctime(3).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <unistd.h> /* getopt(3), read(2), etc.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Constants.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define DFLT_SERVICE "daytime" /* Default service name.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define INVALID_DESC -1 /* Invalid file descriptor.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define MAXCONNQLEN 3 /* Max nbr of connection requests to queue.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define MAXTCPSCKTS 2 /* One TCP socket for IPv4 & one for IPv6.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define MAXUDPSCKTS 2 /* One UDP socket for IPv4 & one for IPv6.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define VALIDOPTS "v" /* Valid command options.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Simple boolean type definition.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
typedef enum { false = 0, true } boolean;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Prototypes for internal helper functions.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static int openSckt( const char *service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *protocol,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int desc[ ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t *descSize );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static void tod( int tSckt[ ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t tScktSize,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int uSckt[ ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t uScktSize );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Global (within this file only) data objects.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static char hostBfr[ NI_MAXHOST ]; /* For use w/getnameinfo(3).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static const char *pgmName; /* Program name w/o dir prefix.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static char servBfr[ NI_MAXSERV ]; /* For use w/getnameinfo(3).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static boolean verbose = false; /* Verbose mode indication.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Usage macro for command syntax violations.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define USAGE
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Usage: %s [-v] [service]
|
|
\backslash
|
|
n",
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName );
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 127 );
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End USAGE macro.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Macro to terminate the program if a system call error occurs.
|
|
The system
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** call must be one of the usual type that returns -1 on error.
|
|
This macro is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** a modified version of a macro authored by Dr.
|
|
V.
|
|
Vinge, SDSU Dept.
|
|
of
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Computer Science (retired)...
|
|
best professor I ever had.
|
|
I hear he writes
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** great science fiction in addition to robust code, too.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define CHK(expr)
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
do
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( (expr) == -1 )
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): System call ERROR - %s.
|
|
\backslash
|
|
n",
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
strerror( errno ) );
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 1 );
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF system call failed.
|
|
*/
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} while ( false )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: main
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Set up a time-of-day server and handle network requests.
|
|
This server
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* handles both TCP and UDP requests.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* The usual argc and argv parameters to a main() function.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* This is a daemon program and never returns.
|
|
However, in the degenerate
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* case where no sockets are created, the function returns zero.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int main( int argc,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *argv[ ] )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int opt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service = DFLT_SERVICE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int tSckt[ MAXTCPSCKTS ]; /* Array of TCP socket descriptors.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t tScktSize = MAXTCPSCKTS; /* Size of uSckt (# of elements).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int uSckt[ MAXUDPSCKTS ]; /* Array of UDP socket descriptors.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t uScktSize = MAXUDPSCKTS; /* Size of uSckt (# of elements).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Set the program name (w/o directory prefix).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName = strrchr( argv[ 0 ], '/' );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName = pgmName == NULL ? argv[ 0 ] : pgmName + 1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Process command options.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
opterr = 0; /* Turns off "invalid option" error messages.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( ( opt = getopt( argc, argv, VALIDOPTS ) ) >= 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( opt )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 'v': /* Verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
verbose = true;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on command option.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End WHILE processing options.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Process command line arguments.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( argc - optind )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 0: break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 1: service = argv[ optind ]; break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default: USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on number of command line arguments.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Open both a TCP and UDP socket, for both IPv4 & IPv6, on which to
|
|
receive
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** service requests.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( openSckt( service, "tcp", tSckt, &tScktSize ) < 0 ) ||
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
( openSckt( service, "udp", uSckt, &uScktSize ) < 0 ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 1 );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Run the time-of-day server.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( tScktSize > 0 ) || ( uScktSize > 0 ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tod( tSckt, /* tod() never returns.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tScktSize,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
uSckt,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
uScktSize );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Since tod() never returns, execution only gets here if no sockets
|
|
were
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** created.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s: No sockets opened...
|
|
terminating.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return 0;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End main() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: openSckt
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Open passive (server) sockets for the indicated inet service & protocol.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Notice in the last sentence that "sockets" is plural.
|
|
During the interim
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* transition period while everyone is switching over to IPv6, the server
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* application has to open two sockets on which to listen for connections...
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* one for IPv4 traffic and one for IPv6 traffic.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* service - Pointer to a character string representing the well-known
|
|
port
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* on which to listen (can be a service name or a decimal number).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* protocol - Pointer to a character string representing the transport
|
|
layer
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* protocol (only "tcp" or "udp" are valid).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* desc - Pointer to an array into which the socket descriptors are
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* placed when opened.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* descSize - This is a value-result parameter.
|
|
On input, it contains the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* max number of descriptors that can be put into 'desc' (i.e.
|
|
the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* number of elements in the array).
|
|
Upon return, it will contain
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* the number of descriptors actually opened.
|
|
Any unused slots in
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* 'desc' are set to INVALID_DESC.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* 0 on success, -1 on error.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static int openSckt( const char *service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *protocol,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int desc[ ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t *descSize )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo *ai;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int aiErr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo *aiHead;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo hints = { .ai_flags = AI_PASSIVE, /* Server mode.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
.ai_family = PF_UNSPEC }; /* IPv4 or IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
¬ */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t maxDescs = *descSize;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Initialize output parameters.
|
|
When the loop completes, *descSize is 0.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( *descSize > 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
desc[ --( *descSize ) ] = INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Check which protocol is selected (only TCP and UDP are valid).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( strcmp( protocol, "tcp" ) == 0 ) /* TCP protocol.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_socktype = SOCK_STREAM;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_protocol = IPPROTO_TCP;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
else if ( strcmp( protocol, "udp" ) == 0 ) /* UDP protocol.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_socktype = SOCK_DGRAM;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_protocol = IPPROTO_UDP;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
else /* Invalid protocol.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - Unknown transport "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"layer protocol
|
|
\backslash
|
|
"%s
|
|
\backslash
|
|
".
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
protocol );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return -1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Look up the service's well-known port number.
|
|
Notice that NULL is being
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** passed for the 'node' parameter, and that the AI_PASSIVE flag is set
|
|
in
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 'hints'.
|
|
Thus, the program is requesting passive address information.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** The network address is initialized to :: (all zeros) for IPv6 records,
|
|
or
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 0.0.0.0 for IPv4 records.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( aiErr = getaddrinfo( NULL,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&hints,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&aiHead ) ) != 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - %s.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
gai_strerror( aiErr ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return -1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** For each of the address records returned, attempt to set up a passive
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** socket.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
for ( ai = aiHead;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
( ai != NULL ) && ( *descSize < maxDescs );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai = ai->ai_next )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the current address info.
|
|
Start with the protocol-
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** independent fields first.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Setting up a passive socket based on the "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"following address info:
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_flags = 0x%02X
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_family = %d (PF_INET = %d, PF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_socktype = %d (SOCK_STREAM = %d, SOCK_DGRAM =
|
|
%d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_protocol = %d (IPPROTO_TCP = %d, IPPROTO_UDP =
|
|
%d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addrlen = %d (sockaddr_in = %d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"sockaddr_in6 = %d)
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_flags,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_socktype,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
SOCK_STREAM,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
SOCK_DGRAM,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_protocol,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPPROTO_TCP,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPPROTO_UDP,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in6 ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Now display the protocol-specific formatted socket address.
|
|
Note
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** that the program is requesting that getnameinfo(3) convert the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** host & service into numeric strings.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
getnameinfo( ai->ai_addr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( hostBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( servBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
NI_NUMERICHOST | NI_NUMERICSERV );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( ai->ai_family )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case PF_INET: /* IPv4 address record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in *p = (struct sockaddr_in*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addr = sin_family: %d (AF_INET = %d,
|
|
"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_port: %s
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv4.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case PF_INET6: /* IPv6 address record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in6 *p = (struct sockaddr_in6*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addr = sin6_family: %d (AF_INET =
|
|
%d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_port: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_flowinfo: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_scope_id: %d
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_flowinfo,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_scope_id );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv6.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default: /* Can never get here, but just for completeness.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - Unknown protocol family (%d).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_family );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
freeaddrinfo( aiHead );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return -1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End DEFAULT case (unknown protocol family).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on protocol family.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Create a socket using the info in the addrinfo structure.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( desc[ *descSize ] = socket( ai->ai_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_socktype,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_protocol ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Here is the code that prevents "IPv4 mapped addresses", as discussed
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** in Section 22.1.3.1.
|
|
If an IPv6 socket was just created, then set the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** IPV6_V6ONLY socket option.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ai->ai_family == PF_INET6 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#if defined( IPV6_V6ONLY )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Disable IPv4 mapped addresses.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int v6Only = 1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( setsockopt( desc[ *descSize ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPPROTO_IPV6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPV6_V6ONLY,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&v6Only,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( v6Only ) ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#else
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** IPV6_V6ONLY is not defined, so the socket option can't be set
|
|
and
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** thus IPv4 mapped addresses can't be disabled.
|
|
Print a warning
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** message and close the socket.
|
|
Design note: If the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** #if...#else...#endif construct were removed, then this program
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** would not compile (because IPV6_V6ONLY isn't defined).
|
|
That's an
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** acceptable approach; IPv4 mapped addresses are certainly disabled
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** if the program can't build! However, since this program is
|
|
also
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** designed to work for IPv4 sockets as well as IPv6, I decided
|
|
to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** allow the program to compile when IPV6_V6ONLY is not defined,
|
|
and
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** turn it into a run-time warning rather than a compile-time error.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** IPv4 mapped addresses are still disabled because _all_ IPv6
|
|
traffic
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** is disabled (all IPv6 sockets are closed here), but at least
|
|
this
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** way the server can still service IPv4 network traffic.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): WARNING - Cannot set IPV6_V6ONLY socket
|
|
"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"option.
|
|
Closing IPv6 %s socket.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_protocol == IPPROTO_TCP ? "TCP" : "UDP" );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( close( desc[ *descSize ] ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
continue; /* Go to top of FOR loop w/o updating *descSize! */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#endif /* IPV6_V6ONLY */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF this is an IPv6 socket.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Bind the socket.
|
|
Again, the info from the addrinfo structure is used.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( bind( desc[ *descSize ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** If this is a TCP socket, put the socket into passive listening
|
|
mode
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** (listen is only valid on connection-oriented sockets).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ai->ai_socktype == SOCK_STREAM )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( listen( desc[ *descSize ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MAXCONNQLEN ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Socket set up okay.
|
|
Bump index to next descriptor array element.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*descSize += 1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End FOR each address info structure returned.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Dummy check for unused address records.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose && ( ai != NULL ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): WARNING - Some address records were "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"not processed due to insufficient array space.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__ );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF verbose and some address records remain unprocessed.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Clean up.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
freeaddrinfo( aiHead );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return 0;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End openSckt() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: tod
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Listen on a set of sockets and send the current time-of-day to any
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* clients.
|
|
This function never returns.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* tSckt - Array of TCP socket descriptors on which to listen.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* tScktSize - Size of the tSckt array (nbr of elements).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* uSckt - Array of UDP socket descriptors on which to listen.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* uScktSize - Size of the uSckt array (nbr of elements).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value: None.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static void tod( int tSckt[ ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t tScktSize,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int uSckt[ ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t uScktSize )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char bfr[ 256 ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ssize_t count;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct pollfd *desc;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t descSize = tScktSize + uScktSize;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int idx;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int newSckt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr *sadr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
socklen_t sadrLen;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_storage sockStor;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int status;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
size_t timeLen;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *timeStr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
time_t timeVal;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ssize_t wBytes;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Allocate memory for the poll(2) array.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
desc = malloc( descSize * sizeof( struct pollfd ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( desc == NULL )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - %s.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
strerror( ENOMEM ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 1 );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Initialize the poll(2) array.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
for ( idx = 0; idx < descSize; idx++ )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
desc[ idx ].fd = idx < tScktSize ? tSckt[ idx ]
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
: uSckt[ idx - tScktSize ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
desc[ idx ].events = POLLIN;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
desc[ idx ].revents = 0;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Main time-of-day server loop.
|
|
Handles both TCP & UDP requests.
|
|
This is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** an interative server, and all requests are handled directly within
|
|
the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** main loop.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( true ) /* Do forever.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Wait for activity on one of the sockets.
|
|
The DO..WHILE construct is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** used to restart the system call in the event the process is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** interrupted by a signal.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
do
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
status = poll( desc,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
descSize,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
-1 /* Wait indefinitely for input.
|
|
*/ );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} while ( ( status < 0 ) && ( errno == EINTR ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( status ); /* Check for a bona fide system call error.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Get the current time.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
timeVal = time( NULL );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
timeStr = ctime( &timeVal );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
timeLen = strlen( timeStr );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Indicate that there is new network activity.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *s = malloc( timeLen+1 );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
strcpy( s, timeStr );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
s[ timeLen-1 ] = '
|
|
\backslash
|
|
0'; /* Overwrite '
|
|
\backslash
|
|
n' in date string.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s: New network activity on %s.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
s );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
free( s );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF verbose.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Process sockets with input available.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
for ( idx = 0; idx < descSize; idx++ )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( desc[ idx ].revents )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 0: /* No activity on this socket; try the next.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
continue;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case POLLIN: /* Network activity.
|
|
Go process it.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default: /* Invalid poll events.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - Invalid poll event (0x%02X).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
desc[ idx ].revents );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 1 );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on returned poll events.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Determine if this is a TCP request or UDP request.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( idx < tScktSize )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** TCP connection requested.
|
|
Accept it.
|
|
Notice the use of
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the sockaddr_storage data type.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadrLen = sizeof( sockStor );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr = (struct sockaddr*) &sockStor;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( newSckt = accept( desc[ idx ].fd,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&sadrLen ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( shutdown( newSckt, /* Server never recv's anything.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
SHUT_RD ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the socket address of the remote client.
|
|
Begin with
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the address-independent fields.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Sockaddr info for new TCP client:
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sa_family = %d (AF_INET = %d, AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" addr len = %d (sockaddr_in = %d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"sockaddr_in6 = %d)
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr->sa_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadrLen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in6 ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the address-specific fields.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
getnameinfo( sadr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadrLen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( hostBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( servBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
NI_NUMERICHOST | NI_NUMERICSERV );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Notice that we're switching on an address family now,
|
|
not a
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** protocol family.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( sadr->sa_family )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case AF_INET: /* IPv4 address.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in *p = (struct sockaddr_in*) sadr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_addr = sin_family: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_port: %s
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv4.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case AF_INET6: /* IPv6 address.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in6 *p = (struct sockaddr_in6*) sadr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_addr = sin6_family: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_port: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_flowinfo: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_scope_id: %d
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_flowinfo,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_scope_id );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv6.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default: /* Can never get here, but for completeness.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - Unknown address "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"family (%d).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr->sa_family );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End DEFAULT case (unknown address family).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on address family.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Send the TOD to the client.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
wBytes = timeLen;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( wBytes > 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
do
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
count = write( newSckt,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
timeStr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
wBytes );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} while ( ( count < 0 ) && ( errno == EINTR ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( count ); /* Check for a bona fide error.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
wBytes -= count;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End WHILE there is data to send.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( close( newSckt ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF this was a TCP connection request.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
else
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** This is a UDP socket, and a datagram is available.
|
|
The funny
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** thing about UDP requests is that this server doesn't require
|
|
any
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** client input; but it can't send the TOD unless it knows a
|
|
client
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** wants the data, and the only way that can occur with UDP
|
|
is if
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the server receives a datagram from the client.
|
|
Thus, the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** server must receive _something_, but the content of the datagram
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** is irrelevant.
|
|
Read in the datagram.
|
|
Again note the use of
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** sockaddr_storage to receive the address.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadrLen = sizeof( sockStor );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr = (struct sockaddr*) &sockStor;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( count = recvfrom( desc[ idx ].fd,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
bfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( bfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&sadrLen ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display whatever was received on stdout.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ssize_t rBytes = count;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s: UDP datagram received (%d bytes).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
count );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( count > 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fputc( bfr[ rBytes - count-- ],
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
stdout );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( bfr[ rBytes-1 ] != '
|
|
\backslash
|
|
n' )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fputc( '
|
|
\backslash
|
|
n', stdout ); /* Newline also flushes stdout.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the socket address of the remote client.
|
|
Address-
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** independent fields first.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Remote client's sockaddr info:
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sa_family = %d (AF_INET = %d, AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" addr len = %d (sockaddr_in = %d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"sockaddr_in6 = %d)
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr->sa_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadrLen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in6 ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the address-specific information.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
getnameinfo( sadr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadrLen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( hostBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( servBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
NI_NUMERICHOST | NI_NUMERICSERV );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( sadr->sa_family )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case AF_INET: /* IPv4 address.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in *p = (struct sockaddr_in*) sadr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_addr = sin_family: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_port: %s
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv4 address.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case AF_INET6: /* IPv6 address.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct sockaddr_in6 *p = (struct sockaddr_in6*) sadr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_addr = sin6_family: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_port: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_flowinfo: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_scope_id: %d
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_flowinfo,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
p->sin6_scope_id );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv6 address.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default: /* Can never get here, but for completeness.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - Unknown address "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"family (%d).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr->sa_family );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End DEFAULT case (unknown address family).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on address family.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Send the time-of-day to the client.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
wBytes = timeLen;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( wBytes > 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
do
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
count = sendto( desc[ idx ].fd,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
timeStr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
wBytes,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
0,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadr, /* Address & address length
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sadrLen ); /* received in recvfrom().
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} while ( ( count < 0 ) && ( errno == EINTR ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
CHK( count ); /* Check for a bona fide error.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
wBytes -= count;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End WHILE there is data to send.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End ELSE a UDP datagram is available.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
desc[ idx ].revents = 0; /* Clear the returned poll events.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End FOR each socket descriptor.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End WHILE forever.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End tod() */
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
'Daytime' TCP Client Code
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The TCP client code is found in file tod6tc.c (time-of-day IPv6 TCP client).
|
|
Once built, the TCP client may be started using the following command syntax
|
|
(assuming tod6tc is the executable file):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tod6tc [-v] [-s scope_id] [host [service]]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ARGUMENTS:
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
host The hostname or IP address (dotted decimal or colon-hex) of the remote
|
|
host providing the service.
|
|
Default is "localhost".
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
service The TCP service (or well-known port number) to which a connection
|
|
attempt is made.
|
|
Default is "daytime".
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
OPTIONS:
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
-s This option is only meaningful for IPv6 addresses, and is used to set
|
|
the scope identifier (i.e.
|
|
the network interface on which to establish the connection).
|
|
Default is "eth0".
|
|
If host is a scoped address, this option is ignored.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
-v Turn on verbose mode.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The TCP client source code contained in tod6tc.c follows:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* File: tod6tc.c
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description: Contains source code for an IPv6-capable 'daytime' TCP client.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Author: John Wenker, Sr.
|
|
Software Engineer
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Performance Technologies, San Diego, USA
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** System header files.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <errno.h> /* errno declaration and error codes.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <net/if.h> /* if_nametoindex(3).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <netdb.h> /* getaddrinfo(3) and associated definitions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <netinet/in.h> /* sockaddr_in and sockaddr_in6 definitions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <stdio.h> /* printf(3) et al.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <stdlib.h> /* exit(2).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <string.h> /* String manipulation and memory functions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <sys/socket.h> /* Socket functions (socket(2), connect(2), etc).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <unistd.h> /* getopt(3), read(2), etc.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Constants & macros.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define DFLT_HOST "localhost" /* Default server name.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define DFLT_SCOPE_ID "eth0" /* Default scope identifier.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define DFLT_SERVICE "daytime" /* Default service name.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define INVALID_DESC -1 /* Invalid file (socket) descriptor.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define MAXBFRSIZE 256 /* Max bfr sz to read remote TOD.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define VALIDOPTS "s:v" /* Valid command options.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Type definitions (for convenience).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
typedef enum { false = 0, true } boolean;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
typedef struct sockaddr_in sockaddr_in_t;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
typedef struct sockaddr_in6 sockaddr_in6_t;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Prototypes for internal helper functions.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static int openSckt( const char *host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
unsigned int scopeId );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static void tod( int sckt );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Global (within this file only) data objects.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static const char *pgmName; /* Program name (w/o directory).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static boolean verbose = false; /* Verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Usage macro.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define USAGE
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Usage: %s [-v] [-s scope_id] [host [service]]
|
|
\backslash
|
|
n",
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName );
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 127 );
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End USAGE macro.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** This "macro" (even though it's really a function) is loosely based on
|
|
the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** CHK() macro by Dr.
|
|
V.
|
|
Vinge (see server code).
|
|
The status parameter is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** a boolean expression indicating the return code from one of the usual
|
|
system
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** calls that returns -1 on error.
|
|
If a system call error occurred, an alert
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** is written to stderr.
|
|
It returns a boolean value indicating success/failure
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** of the system call.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
**
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Example: if ( !SYSCALL( "write",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** count = write( fd, bfr, size ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** // Error processing...
|
|
but SYSCALL() will have already taken
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** // care of dumping an error alert to stderr.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** }
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static __inline boolean SYSCALL( const char *syscallName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int lineNbr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int status )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( status == -1 ) && verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): System call failed ('%s') - %s.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
lineNbr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
syscallName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
strerror( errno ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return status != -1; /* True if the system call was successful.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SYSCALL() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: main
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Connect to a remote time-of-day service and write the remote host's
|
|
TOD to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* stdout.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* The usual argc & argv parameters to a main() program.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* This function always returns zero.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int main( int argc,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *argv[ ] )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *host = DFLT_HOST;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int opt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int sckt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
unsigned int scopeId = if_nametoindex( DFLT_SCOPE_ID );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service = DFLT_SERVICE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Determine the program name (w/o directory prefix).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName = (const char*) strrchr( argv[ 0 ], '/' );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName = pgmName == NULL ? argv[ 0 ] : pgmName+1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Process command line options.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
opterr = 0; /* Turns off "invalid option" error messages.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( ( opt = getopt( argc, argv, VALIDOPTS ) ) != -1 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( opt )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 's': /* Scope identifier (IPv6 kluge).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
scopeId = if_nametoindex( optarg );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( scopeId == 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s: Unknown network interface (%s).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
optarg );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 'v': /* Verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
verbose = true;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on command option.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End WHILE processing command options.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Process command arguments.
|
|
At the end of the above loop, optind is the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** index of the first NON-option argv element.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( argc - optind )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 2: /* Both host & service are specified on the command line.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
service = argv[ optind + 1 ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/***** Fall through *****/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 1: /* Host is specified on the command line.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
host = argv[ optind ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/***** Fall through *****/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 0: /* Use default host & service.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on number of command arguments.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Open a connection to the indicated host/service.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
**
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Note that if all three of the following conditions are met, then the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** scope identifier remains unresolved at this point.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 1) The default network interface is unknown for some reason.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 2) The -s option was not used on the command line.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 3) An IPv6 "scoped address" was not specified for the hostname
|
|
on the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** command line.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** If the above three conditions are met, then only an IPv4 socket can
|
|
be
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** opened (connect(2) fails without the scope ID properly set for IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** sockets).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( sckt = openSckt( host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
scopeId ) ) == INVALID_DESC )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s: Sorry...
|
|
a connection could not be established.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 1 );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Get the remote time-of-day.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tod( sckt );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Close the connection and terminate.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
(void) SYSCALL( "close",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
close( sckt ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return 0;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End main() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: openSckt
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Sets up a TCP connection to a remote server.
|
|
Getaddrinfo(3) is used to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* perform lookup functions and can return multiple address records (i.e.
|
|
a
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* list of 'struct addrinfo' records).
|
|
This function traverses the list and
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* tries to establish a connection to the remote server.
|
|
The function ends
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* when either a connection has been established or all records in the
|
|
list
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* have been processed.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* host - A pointer to a character string representing the hostname
|
|
or IP
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* address (IPv4 or IPv6) of the remote server.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* service - A pointer to a character string representing the service
|
|
name or
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* well-known port number.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* scopeId - For IPv6 sockets only.
|
|
This is the index corresponding to the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* network interface on which to set up the connection.
|
|
This
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* parameter is ignored for IPv4 sockets or when an IPv6 "scoped
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* address" is specified in 'host' (i.e.
|
|
where the colon-hex
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* network address is augmented with the scope ID).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Returns the socket descriptor for the connection, or INVALID_DESC if
|
|
all
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* address records have been processed and a connection could not be
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* established.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static int openSckt( const char *host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
unsigned int scopeId )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo *ai;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int aiErr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo *aiHead;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo hints;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sockaddr_in6_t *pSadrIn6;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int sckt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Initialize the 'hints' structure for getaddrinfo(3).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
**
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Notice that the 'ai_family' field is set to PF_UNSPEC, indicating
|
|
to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** return both IPv4 and IPv6 address records for the host/service.
|
|
Most of
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the time, the user isn't going to care whether an IPv4 connection
|
|
or an
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** IPv6 connection is established; the user simply wants to exchange
|
|
data
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** with the remote host and doesn't care how it's done.
|
|
Sometimes, however,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the user might want to explicitly specify the type of underlying socket.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** It is left as an exercise for the motivated reader to add a command
|
|
line
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** option allowing the user to specify the IP protocol, and then process
|
|
the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** list of addresses accordingly (it's not that difficult).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
memset( &hints, 0, sizeof( hints ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_family = PF_UNSPEC; /* IPv4 or IPv6 records (don't care).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_socktype = SOCK_STREAM; /* Connection-oriented byte stream.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_protocol = IPPROTO_TCP; /* TCP transport layer protocol only.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Look up the host/service information.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( aiErr = getaddrinfo( host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&hints,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&aiHead ) ) != 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - %s.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
gai_strerror( aiErr ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Go through the list and try to open a connection.
|
|
Continue until either
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** a connection is established or the entire list is exhausted.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
for ( ai = aiHead, sckt = INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
( ai != NULL ) && ( sckt == INVALID_DESC );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai = ai->ai_next )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** IPv6 kluge.
|
|
Make sure the scope ID is set.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ai->ai_family == PF_INET6 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( pSadrIn6->sin6_scope_id == 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_scope_id = scopeId;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF the scope ID wasn't set.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IPv6 kluge.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the address info for the remote host.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Temporary character string buffers for host & service.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char hostBfr[ NI_MAXHOST ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char servBfr[ NI_MAXSERV ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the address information just fetched.
|
|
Start with the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** common (protocol-independent) stuff first.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Address info:
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_flags = 0x%02X
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_family = %d (PF_INET = %d, PF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_socktype = %d (SOCK_STREAM = %d, SOCK_DGRAM =
|
|
%d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_protocol = %d (IPPROTO_TCP = %d, IPPROTO_UDP =
|
|
%d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addrlen = %d (sockaddr_in = %d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"sockaddr_in6 = %d)
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_flags,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_socktype,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
SOCK_STREAM,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
SOCK_DGRAM,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_protocol,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPPROTO_TCP,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPPROTO_UDP,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in6 ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the protocol-specific formatted address.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
getnameinfo( ai->ai_addr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( hostBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( servBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
NI_NUMERICHOST | NI_NUMERICSERV );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( ai->ai_family )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case PF_INET: /* IPv4 address record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sockaddr_in_t *pSadrIn = (sockaddr_in_t*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addr = sin_family: %d (AF_INET = %d,
|
|
"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_port: %s
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn->sin_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv4 record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case PF_INET6: /* IPv6 address record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addr = sin6_family: %d (AF_INET =
|
|
%d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_port: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_flowinfo: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_scope_id: %d
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_flowinfo,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_scope_id );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv6 record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default: /* Can never get here, but just for completeness.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - Unknown protocol family (%d).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_family );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End DEFAULT case (unknown protocol family).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on protocol family.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Create a socket.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "socket",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sckt = socket( ai->ai_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_socktype,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_protocol ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sckt = INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
continue; /* Try the next address record in the list.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Connect to the remote host.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "connect",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
connect( sckt,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
(void) close( sckt ); /* Could use SYSCALL() again here, but
|
|
why? */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sckt = INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
continue; /* Try the next address record in the list.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End FOR each address record returned by getaddrinfo(3).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Clean up & return.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
freeaddrinfo( aiHead );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return sckt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End openSckt() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: tod
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Receive the time-of-day from the remote server and write it to stdout.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* sckt - The socket descriptor for the connection.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value: None.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static void tod( int sckt )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char bfr[ MAXBFRSIZE+1 ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int inBytes;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** The client never sends anything, so shut down the write side of the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** connection.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "shutdown",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
shutdown( sckt, SHUT_WR ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Read the time-of-day from the remote host.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
do
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "read",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inBytes = read( sckt,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
bfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MAXBFRSIZE ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
bfr[ inBytes ] = '
|
|
\backslash
|
|
0'; /* Null-terminate the received string.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fputs( bfr, stdout ); /* Null string if EOF (inBytes == 0).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} while ( inBytes > 0 );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fflush( stdout );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End tod() */
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
'Daytime' UDP Client Code
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The UDP client code is found in file tod6uc.c (time-of-day IPv6 UDP client).
|
|
It is almost an exact duplicate of the TCP client (and in fact was derived
|
|
from it), but is included in this HowTo for completeness.
|
|
Once built, the UDP client may be started using the following command syntax
|
|
(assuming tod6uc is the executable file):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tod6uc [-v] [-s scope_id] [host [service]]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ARGUMENTS:
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
host The hostname or IP address (dotted decimal or colon-hex) of the remote
|
|
host providing the service.
|
|
Default is "localhost".
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
service The UDP service (or well-known port number) to which datagrams are
|
|
sent.
|
|
Default is "daytime".
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
OPTIONS:
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
-s This option is only meaningful for IPv6 addresses, and is used to set
|
|
the scope identifier (i.e.
|
|
the network interface on which to exchange datagrams).
|
|
Default is "eth0".
|
|
If host is a scoped address, this option is ignored.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
-v Turn on verbose mode.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The UDP client source code contained in tod6uc.c follows:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* File: tod6uc.c
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description: Contains source code for an IPv6-capable 'daytime' UDP client.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Author: John Wenker, Sr.
|
|
Software Engineer
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Performance Technologies, San Diego, USA
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** System header files.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <errno.h> /* errno declaration and error codes.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <net/if.h> /* if_nametoindex(3).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <netdb.h> /* getaddrinfo(3) and associated definitions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <netinet/in.h> /* sockaddr_in and sockaddr_in6 definitions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <stdio.h> /* printf(3) et al.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <stdlib.h> /* exit(2).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <string.h> /* String manipulation and memory functions.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <sys/socket.h> /* Socket functions (socket(2), connect(2), etc).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#include <unistd.h> /* getopt(3), recvfrom(2), sendto(2), etc.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Constants & macros.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define DFLT_HOST "localhost" /* Default server name.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define DFLT_SCOPE_ID "eth0" /* Default scope identifier.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define DFLT_SERVICE "daytime" /* Default service name.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define INVALID_DESC -1 /* Invalid file (socket) descriptor.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define MAXBFRSIZE 256 /* Max bfr sz to read remote TOD.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define VALIDOPTS "s:v" /* Valid command options.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Type definitions (for convenience).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
typedef enum { false = 0, true } boolean;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
typedef struct sockaddr_in sockaddr_in_t;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
typedef struct sockaddr_in6 sockaddr_in6_t;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Prototypes for internal helper functions.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static int openSckt( const char *host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
unsigned int scopeId );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static void tod( int sckt );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Global (within this file only) data objects.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static const char *pgmName; /* Program name (w/o directory).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static boolean verbose = false; /* Verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Usage macro.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
#define USAGE
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Usage: %s [-v] [-s scope_id] [host [service]]
|
|
\backslash
|
|
n",
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName );
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 127 );
|
|
|
|
\backslash
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End USAGE macro.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** This "macro" (even though it's really a function) is loosely based on
|
|
the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** CHK() macro by Dr.
|
|
V.
|
|
Vinge (see server code).
|
|
The status parameter is
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** a boolean expression indicating the return code from one of the usual
|
|
system
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** calls that returns -1 on error.
|
|
If a system call error occurred, an alert
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** is written to stderr.
|
|
It returns a boolean value indicating success/failure
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** of the system call.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
**
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Example: if ( !SYSCALL( "write",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** count = write( fd, bfr, size ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** {
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** // Error processing...
|
|
but SYSCALL() will have already taken
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** // care of dumping an error alert to stderr.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** }
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static __inline boolean SYSCALL( const char *syscallName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int lineNbr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int status )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( status == -1 ) && verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): System call failed ('%s') - %s.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
lineNbr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
syscallName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
strerror( errno ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return status != -1; /* True if the system call was successful.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SYSCALL() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: main
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Connect to a remote time-of-day service and write the remote host's
|
|
TOD to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* stdout.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* The usual argc & argv parameters to a main() program.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* This function always returns zero.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int main( int argc,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char *argv[ ] )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *host = DFLT_HOST;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int opt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int sckt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
unsigned int scopeId = if_nametoindex( DFLT_SCOPE_ID );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service = DFLT_SERVICE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Determine the program name (w/o directory prefix).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName = (const char*) strrchr( argv[ 0 ], '/' );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName = pgmName == NULL ? argv[ 0 ] : pgmName+1;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Process command line options.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
opterr = 0; /* Turns off "invalid option" error messages.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
while ( ( opt = getopt( argc, argv, VALIDOPTS ) ) != -1 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( opt )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 's': /* Scope identifier (IPv6 kluge).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
scopeId = if_nametoindex( optarg );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( scopeId == 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s: Unknown network interface (%s).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
optarg );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 'v': /* Verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
verbose = true;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on command option.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End WHILE processing command options.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Process command arguments.
|
|
At the end of the above loop, optind is the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** index of the first NON-option argv element.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( argc - optind )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 2: /* Both host & service are specified on the command line.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
service = argv[ optind + 1 ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/***** Fall through *****/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 1: /* Host is specified on the command line.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
host = argv[ optind ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/***** Fall through *****/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case 0: /* Use default host & service.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
USAGE;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on number of command arguments.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Open a connection to the indicated host/service.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
**
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Note that if all three of the following conditions are met, then the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** scope identifier remains unresolved at this point.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 1) The default network interface is unknown for some reason.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 2) The -s option was not used on the command line.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** 3) An IPv6 "scoped address" was not specified for the hostname
|
|
on the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** command line.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** If the above three conditions are met, then only an IPv4 socket can
|
|
be
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** opened (connect(2) fails without the scope ID properly set for IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** sockets).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( sckt = openSckt( host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
scopeId ) ) == INVALID_DESC )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s: Sorry...
|
|
a connectionless socket could "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"not be set up.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
exit( 1 );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Get the remote time-of-day.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
tod( sckt );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Close the connection and terminate.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
(void) SYSCALL( "close",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
close( sckt ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return 0;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End main() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: openSckt
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Sets up a UDP socket to a remote server.
|
|
Getaddrinfo(3) is used to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* perform lookup functions and can return multiple address records (i.e.
|
|
a
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* list of 'struct addrinfo' records).
|
|
This function traverses the list and
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* tries to establish a connection to the remote server.
|
|
The function ends
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* when either a connection has been established or all records in the
|
|
list
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* have been processed.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* host - A pointer to a character string representing the hostname
|
|
or IP
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* address (IPv4 or IPv6) of the remote server.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* service - A pointer to a character string representing the service
|
|
name or
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* well-known port number.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* scopeId - For IPv6 sockets only.
|
|
This is the index corresponding to the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* network interface on which to exchange datagrams.
|
|
This
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* parameter is ignored for IPv4 sockets or when an IPv6 "scoped
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* address" is specified in 'host' (i.e.
|
|
where the colon-hex
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* network address is augmented with the scope ID).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Returns the socket descriptor for the connection, or INVALID_DESC if
|
|
all
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* address records have been processed and a socket could not be initialized.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static int openSckt( const char *host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
const char *service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
unsigned int scopeId )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo *ai;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int aiErr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo *aiHead;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
struct addrinfo hints;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sockaddr_in6_t *pSadrIn6;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int sckt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Initialize the 'hints' structure for getaddrinfo(3).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
**
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Notice that the 'ai_family' field is set to PF_UNSPEC, indicating
|
|
to
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** return both IPv4 and IPv6 address records for the host/service.
|
|
Most of
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the time, the user isn't going to care whether an IPv4 connection
|
|
or an
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** IPv6 connection is established; the user simply wants to exchange
|
|
data
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** with the remote host and doesn't care how it's done.
|
|
Sometimes, however,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** the user might want to explicitly specify the type of underlying socket.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** It is left as an exercise for the motivated reader to add a command
|
|
line
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** option allowing the user to specify the IP protocol, and then process
|
|
the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** list of addresses accordingly (it's not that difficult).
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
memset( &hints, 0, sizeof( hints ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_family = PF_UNSPEC; /* IPv4 or IPv6 records (don't care).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_socktype = SOCK_DGRAM; /* Connectionless communication.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hints.ai_protocol = IPPROTO_UDP; /* UDP transport layer protocol only.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Look up the host/service information.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ( aiErr = getaddrinfo( host,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
service,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&hints,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
&aiHead ) ) != 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - %s.
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
gai_strerror( aiErr ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Go through the list and try to open a connection.
|
|
Continue until either
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** a connection is established or the entire list is exhausted.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
for ( ai = aiHead, sckt = INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
( ai != NULL ) && ( sckt == INVALID_DESC );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai = ai->ai_next )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** IPv6 kluge.
|
|
Make sure the scope ID is set.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( ai->ai_family == PF_INET6 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( pSadrIn6->sin6_scope_id == 0 )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_scope_id = scopeId;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF the scope ID wasn't set.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IPv6 kluge.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the address info for the remote host.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( verbose )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Temporary character string buffers for host & service.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char hostBfr[ NI_MAXHOST ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char servBfr[ NI_MAXSERV ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the address information just fetched.
|
|
Start with the
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** common (protocol-independent) stuff first.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"Address info:
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_flags = 0x%02X
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_family = %d (PF_INET = %d, PF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_socktype = %d (SOCK_STREAM = %d, SOCK_DGRAM =
|
|
%d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_protocol = %d (IPPROTO_TCP = %d, IPPROTO_UDP =
|
|
%d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addrlen = %d (sockaddr_in = %d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"sockaddr_in6 = %d)
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_flags,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
PF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_socktype,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
SOCK_STREAM,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
SOCK_DGRAM,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_protocol,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPPROTO_TCP,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
IPPROTO_UDP,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( struct sockaddr_in6 ) );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Display the protocol-specific formatted address.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
getnameinfo( ai->ai_addr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( hostBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sizeof( servBfr ),
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
NI_NUMERICHOST | NI_NUMERICSERV );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
switch ( ai->ai_family )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case PF_INET: /* IPv4 address record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sockaddr_in_t *pSadrIn = (sockaddr_in_t*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addr = sin_family: %d (AF_INET = %d,
|
|
"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin_port: %s
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn->sin_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv4 record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
case PF_INET6: /* IPv6 address record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" ai_addr = sin6_family: %d (AF_INET =
|
|
%d, "
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"AF_INET6 = %d)
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_addr: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_port: %s
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_flowinfo: %d
|
|
\backslash
|
|
n"
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
" sin6_scope_id: %d
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
AF_INET6,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
hostBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
servBfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_flowinfo,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pSadrIn6->sin6_scope_id );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End CASE of IPv6 record.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
default: /* Can never get here, but just for completeness.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fprintf( stderr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
"%s (line %d): ERROR - Unknown protocol family (%d).
|
|
\backslash
|
|
n",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
pgmName,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_family );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
break;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End DEFAULT case (unknown protocol family).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End SWITCH on protocol family.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End IF verbose mode.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Create a socket.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "socket",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sckt = socket( ai->ai_family,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_socktype,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_protocol ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sckt = INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
continue; /* Try the next address record in the list.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Set the target destination for the remote host on this socket.
|
|
That
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** is, this socket only communicates with the specified host.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "connect",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
connect( sckt,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
ai->ai_addrlen ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
(void) close( sckt ); /* Could use SYSCALL() again here, but
|
|
why? */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
sckt = INVALID_DESC;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
continue; /* Try the next address record in the list.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End FOR each address record returned by getaddrinfo(3).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Clean up & return.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
freeaddrinfo( aiHead );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return sckt;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End openSckt() */
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/******************************************************************************
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Function: tod
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Description:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Receive the time-of-day from the remote server and write it to stdout.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Parameters:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* sckt - The socket descriptor for the connection.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
* Return Value: None.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
******************************************************************************/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
static void tod( int sckt )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
char bfr[ MAXBFRSIZE+1 ];
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
int inBytes;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Send a datagram to the server to wake it up.
|
|
The content isn't
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** important, but something must be sent to let it know we want the TOD.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "write",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
write( sckt, "Are you there?", 14 ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
/*
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
** Read the time-of-day from the remote host.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
if ( !SYSCALL( "read",
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
__LINE__,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
inBytes = read( sckt,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
bfr,
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
MAXBFRSIZE ) ) )
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
{
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
return;
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
}
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
bfr[ inBytes ] = '
|
|
\backslash
|
|
0'; /* Null-terminate the received string.
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fputs( bfr, stdout ); /* Null string if EOF (inBytes == 0).
|
|
*/
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
fflush( stdout );
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
} /* End tod() */
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Other programming languages
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
JAVA
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Sun Java versions since 1.4 are IPv6 enabled, see e.g.
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Inet6Address (1.5/5.0)"
|
|
target "http://java.sun.com/j2se/1.5.0/docs/api/java/net/Inet6Address.html"
|
|
|
|
\end_inset
|
|
|
|
class.
|
|
Hints are available in the
|
|
\emph on
|
|
Networking IPv6 User Guide for JDK/JRE
|
|
\emph default
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "1.4"
|
|
target "http://java.sun.com/j2se/1.4.2/docs/guide/net/ipv6_guide/index.html"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "1.5 (5.0)"
|
|
target "http://java.sun.com/j2se/1.5.0/docs/guide/net/ipv6_guide/index.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Perl
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As of May 2007 it's not known that the Perl core itself already supports
|
|
IPv6.
|
|
It can be added by using following modules:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Socket6"
|
|
target "http://search.cpan.org/~umemoto/Socket6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Anyway, some other modules exist for/with IPv6 support (e.g.
|
|
Net::IP), search for
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
IPv6
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
on
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://search.cpan.org/"
|
|
target "http://search.cpan.org/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-interoperability"
|
|
|
|
\end_inset
|
|
|
|
Interoperability
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "TAHI Project"
|
|
target "http://www.tahi.org/"
|
|
|
|
\end_inset
|
|
|
|
checks the interoperability of different operating systems regarding the
|
|
implementation of IPv6 features.
|
|
Linux kernel already got the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Ready Logo Phase 1"
|
|
target "http://www.linux-ipv6.org/v6ready/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-information"
|
|
|
|
\end_inset
|
|
|
|
Further information and URLs
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-books"
|
|
|
|
\end_inset
|
|
|
|
Paper printed books, articles, online reviews (mixed)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Printed Books (English)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Cisco
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Cisco Self-Study: Implementing IPv6 Networks (IPV6) by Regis Desmeules.
|
|
Cisco Press; ISBN 1587050862; 500 pages; 1st edition (April 11, 2003).
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Note: This item will be published on April 11, 2003.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Configuring IPv6 with Cisco IOS by Sam Brown, Sam Browne, Neal Chen, Robbie
|
|
Harrell, Edgar, Jr.
|
|
Parenti (Editor), Eric Knipp (Editor), Paul Fong (Editor)362 pages; Syngress
|
|
Media Inc; ISBN 1928994849; (July 12, 2002).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
General
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
|
|
\lang ngerman
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 in Practice: A Unixer's Guide to the Next Generation Internet"
|
|
target "http://www.benedikt-stockebrand.de/books_e.html#ipv6-in-practice"
|
|
|
|
\end_inset
|
|
|
|
von Benedikt Stockebrand, November 2006; ISBN 3-540-24524-3
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Essentials"
|
|
target "http://www.sunny.ch/publications/f_ipv6.htm"
|
|
|
|
\end_inset
|
|
|
|
by Silvia Hagen,
|
|
\lang ngerman
|
|
2nd Edition, May 2006; ISBN 0-5961-0058-2
|
|
\lang english
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ToC, Index, Sample Chapter etc."
|
|
target "http://www.oreilly.com/catalog/ipv6ess/"
|
|
|
|
\end_inset
|
|
|
|
;
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "O'Reilly Pressrelease"
|
|
target "http://press.oreilly.com/ipv6ess.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
IPv6: The New Internet Protocol.
|
|
By Christian Huitema; Published by Prentice-Hall; ISBN 0138505055.
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Description: This book, written by Christian Huitema - a member of the InternetA
|
|
rchitecture Board, gives an excellent description of IPv6, how it differs
|
|
from IPv4, and the hows and whys of it's development.
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Source:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.cs.uu.nl/wais/html/na-dir/internet/tcp-ip/resource-list.html"
|
|
target "http://www.cs.uu.nl/wais/html/na-dir/internet/tcp-ip/resource-list.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Networks"
|
|
target "http://www.epinions.com/book_mu-3402412/display_~full_specs"
|
|
|
|
\end_inset
|
|
|
|
by Niles, Kitty; (ISBN 0070248079); 550 pages; Date Published 05/01/1998.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Implementing IPV6.
|
|
Supporting the Next Generation Internet Protocols by P.
|
|
E.
|
|
Miller, Mark A.
|
|
Miller; Publisher: John Wiley & Sons; ISBN 0764545892; 2nd edition (March
|
|
15, 2000); 402 pages.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Big Book of Ipv6 Addressing Rfcs by Peter H.
|
|
Salus (Compiler), Morgan Kaufmann Publishers, April 2000, 450 pages ISBN
|
|
0126167702.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Understanding IPV6"
|
|
target "http://www.epinions.com/book_mu-3922588/display_~full_specs"
|
|
|
|
\end_inset
|
|
|
|
by Davies, Joseph; ISBN 0735612455; Date Published 05/01/2001; Number of
|
|
Pages: 350.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Migrating to IPv6 - IPv6 in Practice by Marc Blanchet Publisher: John Wiley
|
|
& Sons; ISBN 0471498920; 1st edition (November 2002); 368 pages.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Ipv6 Network Programming by Jun-ichiro Hagino; ISBN 1555583180
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Wireless boosting IPv6"
|
|
target "http://www.nwfusion.com/news/2000/1023ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
by Carolyn Duffy Marsan, 10/23/2000.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "O'reilly Network search for keyword IPv6"
|
|
target "http://www.oreillynet.com/search/index.ncsp?sp-q=IPv6"
|
|
|
|
\end_inset
|
|
|
|
results in 29 hits (28.
|
|
January 2002)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Articles, eBooks, Online Reviews (mixed)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Getting Connected with 6to4"
|
|
target "http://www.onlamp.com/pub/a/onlamp/2001/06/01/ipv6_tutorial.html"
|
|
|
|
\end_inset
|
|
|
|
by Huber Feyrer, 06/01/2001
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Transient Addressing for Related Processes: Improved Firewalling by Using
|
|
IPv6 and Multiple Addresses per Host; written by Peter M.
|
|
Gleiz, Steven M.
|
|
Bellovin (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "PC-PDF-Version"
|
|
target "http://www.securiteinfo.com/ebooks/pdf/tarp.pdf"
|
|
|
|
\end_inset
|
|
|
|
;
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Palm-PDF-Version"
|
|
target "http://www.securiteinfo.com/ebooks/palm/tarp.pdf"
|
|
|
|
\end_inset
|
|
|
|
;
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "PDB-Version"
|
|
target "http://www.securiteinfo.com/ebooks/pdb/tarp.pdb"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Internetworking IPv6 with Cisco Routers"
|
|
target "http://www.ip6.com/index.html"
|
|
|
|
\end_inset
|
|
|
|
by Silvano Gai, McGrawHill Italia, 1997.
|
|
The 13 chapters and appendix A-D are downloadable as PDF-documents.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Migration and Co-existence of IPv4 and IPv6 in Residential Networks"
|
|
target "http://www.csc.fi/~psavola/residential.html"
|
|
|
|
\end_inset
|
|
|
|
by Pekka Savola, CSC/FUNET, 2002
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-sciencepublication"
|
|
|
|
\end_inset
|
|
|
|
Science Publications (abstracts, bibliographies, online resources)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See also:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "liinwww.ira.uka.de/ipv6"
|
|
target "http://liinwww.ira.uka.de/mpsbib?query=ipv6&maxnum=200"
|
|
|
|
\end_inset
|
|
|
|
or
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Google / Scholar / IPv6"
|
|
target "http://www.google.com/scholar?q=ipv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "GEANT IPv6 Workplan"
|
|
target "http://www.ipv6.ac.uk/gtpv6/workplan.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Trials on UK Academic Networks: Bermuda Project Aug.2002"
|
|
target "http://www.ipv6.ac.uk/bermuda2/"
|
|
|
|
\end_inset
|
|
|
|
: Participants - Getting connected - Project deliverables - Network topology
|
|
- Address assignments - Wireless IPv6 access - IPv6 migration - Project
|
|
presentations - Internet 2 - Other IPv6 projects - IPv6 fora and standards
|
|
Bermuda 2...
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.ipv6.ac.uk/"
|
|
target "http://www.ipv6.ac.uk/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 at the University of Southampton"
|
|
target "http://www.ipv6.ecs.soton.ac.uk/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Microsoft Research IPv6 Implementation (MSRIPv6):
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "MSRIPv6 Configuring 6to4 - Connectivity with MSR IPv6 - Our 6Bone Node... "
|
|
target "http://www.research.microsoft.com/msripv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Others
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See following URL for more:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SWITCH IPv6 Pilot / References"
|
|
target "http://www.switch.ch/lan/ipv6/references.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-conferences"
|
|
|
|
\end_inset
|
|
|
|
Conferences, Meetings, Summits
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
2004
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
1st Global IPv6 Summit in Sao Paul, Brazil
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-onlineinformation"
|
|
|
|
\end_inset
|
|
|
|
Online information
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-joinipv6"
|
|
|
|
\end_inset
|
|
|
|
Join the IPv6 backbone
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
More to be filled later...suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-globalregistries"
|
|
|
|
\end_inset
|
|
|
|
Global registries
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See regional registries.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-majorregionregistries"
|
|
|
|
\end_inset
|
|
|
|
Major regional registries
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
America:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ARIN"
|
|
target "http://www.arin.net/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ARIN / registration page"
|
|
target "http://www.arin.net/registration/ipv6/index.html"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\lang ngerman
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ARIN / IPv6 guidelines"
|
|
target "http://www.arin.net/registration/ipv6/index.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
EMEA:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Ripe NCC"
|
|
target "http://www.ripe.net/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Ripe NCC / registration page"
|
|
target "http://www.ripe.net/ripencc/mem-services/registration/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Ripe NCC / IPv6 registration"
|
|
target "http://www.ripe.net/ripencc/mem-services/registration/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Asia/Pacific:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "APNIC"
|
|
target "http://www.apnic.net/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "APNIC / IPv6 ressource guide"
|
|
target "http://www.apnic.net/services/ipv6_guide.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Latin America and Caribbea:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "LACNIC"
|
|
target "http://lacnic.org/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Registration Services"
|
|
target "http://lacnic.net/en/bt-IPv6.html"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Allocation Policy"
|
|
target "http://lacnic.net/en/chapter-4-en.pdf"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Africa:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "AfriNIC"
|
|
target "http://www.afrinic.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Also a list of major (prefix length 32) allocations per local registry is
|
|
available here:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Ripe NCC / IPv6 allocations"
|
|
target "http://www.ripe.net/ripencc/mem-services/registration/ipv6/ipv6allocs.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-joinipv6-tunnelbrokers"
|
|
|
|
\end_inset
|
|
|
|
Tunnel brokers
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: A list of available Tunnel broker can be found in the section
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Tunnel broker"
|
|
reference "information-Tunnelbroker"
|
|
|
|
\end_inset
|
|
|
|
below.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Former IPng.
|
|
Tunnelbroker and IPv6 resources, now migrated to the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SixXs System"
|
|
target "http://www.sixxs.net/main/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Eckes'
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6-with-Linux"
|
|
target "http://sites.inka.de/lina/linux/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
Page.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
tunnelc - a perl based tunnel client script:
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
freshmeat.net:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Project details for tunnel client"
|
|
target "http://freshmeat.net/projects/tunnelc"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
SourceForge:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Project Info - tunnelc"
|
|
target "http://sourceforge.net/projects/tunnelc"
|
|
|
|
\end_inset
|
|
|
|
(also
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "here"
|
|
target "http://tunnelc.sourceforge.net/"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Linux Advanced Routing & Traffic Control HOWTO,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Chapter 6: IPv6 tunneling with Cisco and/or 6bone"
|
|
target "http://howtos.linuxbroker.com/howtoreader.shtml?file=Adv-Routing-HOWTO.html#LARTC.TUNNEL-IPV6.ADDRESSING"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-joinipv6-6to4-tunneling"
|
|
|
|
\end_inset
|
|
|
|
6to4
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NSayer's 6to4 information"
|
|
target "http://www.kfu.com/~nsayer/6to4/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3068 / An Anycast Prefix for 6to4 Relay Routers"
|
|
target "http://www.faqs.org/rfcs/rfc3068.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-joinipv6-isatap-tunneling"
|
|
|
|
\end_inset
|
|
|
|
ISATAP
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ISATAP (Intra-Site Automatic Tunnel Access Protocol) Information"
|
|
target "http://www.join.uni-muenster.de/Dokumente/Howtos/Howto_ISATAP.php?lang=en"
|
|
|
|
\end_inset
|
|
|
|
by
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "JOIN"
|
|
target "http://www.join.uni-muenster.de/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Latest news and URLs to other documents
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Lot of URLs to others documents"
|
|
target "http://www.estoile.com/links/ipv6"
|
|
|
|
\end_inset
|
|
|
|
by Anil Edathara
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "go6 - The IPv6 Portal"
|
|
target "http://www.go6.net/"
|
|
|
|
\end_inset
|
|
|
|
: an IPv6 online portal with a wiki-based IPv6 knowledge center, an IPv6
|
|
discussion forum, an up-to-date collection of IPv6 Events and News, free
|
|
IPv6 access and services, IPv6 software applications, and much more
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Protocol references
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6-related Request For Comments (RFCs)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Publishing the list of IPv6-related RFCs is beyond the scope of this document,
|
|
but given URLs will lead you to such lists:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
List sorted by
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPng Standardization Status"
|
|
target "http://playground.sun.com/pub/ipng/html/specs/standards.html"
|
|
|
|
\end_inset
|
|
|
|
or
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPng Current Specifications"
|
|
target "http://playground.sun.com/pub/ipng/html/specs/specifications.html"
|
|
|
|
\end_inset
|
|
|
|
by Robert Hinden
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Related Specifications"
|
|
target "http://www.ipv6.org/specs.html"
|
|
|
|
\end_inset
|
|
|
|
on IPv6.org
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Current drafts of working groups
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Current (also) IPv6-related drafts can be found here:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IP Version 6 (ipv6)"
|
|
target "http://www.ietf.org/ids.by.wg/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Next Generation Transition (ngtrans)"
|
|
target "http://www.ietf.org/ids.by.wg/ngtrans.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Dynamic Host Configuration (dhc)"
|
|
target "http://www.ietf.org/ids.by.wg/dhc.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Domain Name System Extension (dnsext)"
|
|
target "http://www.ietf.org/ids.by.wg/dnsext.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Operations (v6ops)"
|
|
target "http://www.ietf.org/ids.by.wg/v6ops.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mobile IP (mobileip)"
|
|
target "http://www.ietf.org/ids.by.wg/mobileip.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Get any information about IPv6, from overviews, through RFCs & drafts, to implementations"
|
|
target "http://playground.sun.com/pub/ipng/html/ipng-main.html"
|
|
|
|
\end_inset
|
|
|
|
(including availability of stacks on various platforms & source code for
|
|
IPv6 stacks)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Others
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SWITCH IPv6 Pilot / References"
|
|
target "http://www.switch.ch/lan/ipv6/references.html"
|
|
|
|
\end_inset
|
|
|
|
, big list of IPv6 references maintained by Simon Leinen
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
More information
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\lang ngerman
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DeepSpace6 / more interesting links"
|
|
target "http://www.deepspace6.net/sections/links.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Linux related
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DeepSpace6 / (Not only) Linux IPv6 Portal"
|
|
target "http://www.deepspace6.net/"
|
|
|
|
\end_inset
|
|
|
|
- Italy (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6-HowTo for Linux by Peter Bieringer"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
- Germany, and his
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Bieringer / IPv6 - software archive"
|
|
target "ftp://ftp.bieringer.de/pub/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux+IPv6 status by Peter Bieringer"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status.html"
|
|
|
|
\end_inset
|
|
|
|
- Germany (going obsolete)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DeepSpace6 / IPv6 Status Page"
|
|
target "http://www.deepspace6.net/docs/ipv6_status_page_apps.html"
|
|
|
|
\end_inset
|
|
|
|
- Italy (
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/docs/ipv6_status_page_apps.html"
|
|
|
|
\end_inset
|
|
|
|
) (will superseed upper one)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI project"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
- Japan, and their
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI project - software archive"
|
|
target "ftp://ftp.linux-ipv6.org/pub/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux Optimized Link State Routing Protocol (OLSR) IPv6 HOWTO"
|
|
target "http://www.tldp.org/HOWTO/OLSR-IPv6-HOWTO/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "LinShim6"
|
|
target "http://inl.info.ucl.ac.be/LinShim6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Linux related per distribution
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
PLD
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "PLD Linux Distribution"
|
|
target "http://www.pld-linux.org/"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
market leader
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
in containing IPv6 enabled packages)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Red
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
Hat
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Red Hat Enterprise Linux"
|
|
target "http://www.redhat.com/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name " Pekka Savola's IPv6 packages"
|
|
target "http://www.netcore.fi/pekkas/linux/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
|
|
\lang ngerman
|
|
Fedora
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Fedora Core Linux"
|
|
target "http://www.fedora.redhat.com/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Debian
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Debian Linux"
|
|
target "http://www.debian.org/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\lang ngerman
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 with Debian Linux"
|
|
target "http://ipv6.debian.net/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
|
|
\lang ngerman
|
|
Novell/SuSE
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Novell/SuSE Linux"
|
|
target "http://www.novell.com/linux/suse/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Mandriva
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mandriva"
|
|
target "http://www.mandriva.com/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
For more see the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6+Linux Status Distributions"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-distributions.html"
|
|
|
|
\end_inset
|
|
|
|
page.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
General
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6.org"
|
|
target "http://www.ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "6bone"
|
|
target "http://www.6bone.net/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "WIDE project"
|
|
target "http://www.v6.wide.ad.jp/"
|
|
|
|
\end_inset
|
|
|
|
- Japan
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SWITCH IPv6 Pilot"
|
|
target "http://www.switch.ch/lan/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
- Switzerland
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Corner of Hubert Feyrer"
|
|
target "http://www.feyrer.de/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
- Germany
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Forum"
|
|
target "http://www.ipv6forum.com/"
|
|
|
|
\end_inset
|
|
|
|
- a world-wide consortium of leading Internet vendors, Research & Education
|
|
Networks...
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Playground.sun.com / IPv6 Info Page"
|
|
target "http://playground.sun.com/pub/ipng/html/ipng-main.html"
|
|
|
|
\end_inset
|
|
|
|
- maintained by Robert Hinden, Nokia.
|
|
Get any information about IPv6, from overviews, through RFCs & drafts,
|
|
to implementations (including availability of stacks on various platforms
|
|
& source code for IPv6 stacks).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "6INIT"
|
|
target "http://www.6init.com/"
|
|
|
|
\end_inset
|
|
|
|
- IPv6 Internet Initiative - an EU Fifth Framework Project under the IST
|
|
Programme.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Task Force (European Union)"
|
|
target "http://www.ipv6-taskforce.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "6init"
|
|
target "http://www.6init.org/"
|
|
|
|
\end_inset
|
|
|
|
- IPv6 INternet IniTiative
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6: The New Version of the Internet Protocol"
|
|
target "http://www.usenix.org/publications/library/proceedings/ana97/summaries/deering.html"
|
|
|
|
\end_inset
|
|
|
|
, by Steve Deering.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6: The Next Generation Internet Protocol"
|
|
target "http://www.garykessler.net/library/ipv6_exp.html"
|
|
|
|
\end_inset
|
|
|
|
, by Gary C.
|
|
Kessler.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6: Next Generation Internet Protocol"
|
|
target "http://www.3com.com/nsc/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
- 3Com
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "internet || site"
|
|
target "http://www.internet2.org/"
|
|
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "internet2 Working Group"
|
|
target "http://ipv6.internet2.edu/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
NetworkWorldFusion: Search / Doc Finder:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "searched for IPv6"
|
|
target "http://search.nwfusion.com/query.html?qt=IPv6&qp=&ch=cn&"
|
|
|
|
\end_inset
|
|
|
|
(102 documents found 22.12.2002)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "The Register"
|
|
target "http://www.theregister.co.uk/"
|
|
|
|
\end_inset
|
|
|
|
(Search for IPv6 will result in 30 documents, 22.12.2002)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ZDNet Search for IPv6"
|
|
target "http://zdnet.search.com/search?cat=279&q=IPv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "TechTarget Search for IPv6"
|
|
target "http://whatis.techtarget.com/wsearchResults/1,290214,sid9,00.html?query=IPv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & TCP Resources List"
|
|
target "http://www.faqs.org/faqs/internet/tcp-ip/resource-list/index.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-marketresearch"
|
|
|
|
\end_inset
|
|
|
|
Market Research
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "A Tale of Two Wireless Technology Trends: Processor Development Outsourcing and IPv6"
|
|
target "http://www.seminarinformation.com/wconnect/wc.dll?sis~details0~307~TSN"
|
|
|
|
\end_inset
|
|
|
|
Yankee Group - 4/1/2002 - 12 Pages - ID: YANL768881
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "The World Atlas of the Internet: Americas"
|
|
target "http://www.marketresearch.com/product/display.asp?SID=88602378-241489274-186851952&ProductID=803907"
|
|
|
|
\end_inset
|
|
|
|
; IDATE - 2/1/2002 - 242 PAges - ID: IDT803907.
|
|
Countries covered: Central America, North America, South America; List:
|
|
Price: $ 3,500.00; excerpt: Panorama of Internet access markets across the
|
|
globe.
|
|
Market assessment and forecasts up to 2006 for 34 countries: market structure:
|
|
main ISPs and market shares; number of subscribers, of ISPs.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Early Interest Rising for IPv6 by IDC (Author); List Price: $1,500.00;
|
|
Edition: e-book (Acrobat Reader); Publisher: IDC; ISBN B000065T8E; (March
|
|
1, 2002)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-patents"
|
|
|
|
\end_inset
|
|
|
|
Patents
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Delphion Research:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Patent Search Page"
|
|
target "http://www.delphion.com/research/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Basic (free) registration needed.
|
|
Examples found 21.12.2002 searching for IPv6:
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Communicating method between IPv4 terminal and IPv6 terminal and IPv4-IPv6 converting apparatus"
|
|
target "http://www.delphion.com/details?pn=US06118784__"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Translator for IP networks, network system using the translator, and IP network coupling method therefor"
|
|
target "http://www.delphion.com/details?pn=US06038233__"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
By countries
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Europe
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "www.ist-ipv6.org"
|
|
target "http://www.ist-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
: IST IPv6 Cluster, European IPv6 Research and Development Projects
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Euro6IX"
|
|
target "http://www.euro6ix.org/"
|
|
|
|
\end_inset
|
|
|
|
: European IPv6 Internet Exchanges Backbone
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Austria
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6@IKNnet and MIPv6 Research Group"
|
|
target "http://www.ikn.tuwien.ac.at/~ipv6/"
|
|
|
|
\end_inset
|
|
|
|
: TU Vienna, Austria (IPv6: project, publications, diploma / doctor thesis,
|
|
Conference Proceedings etc.)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Australia
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Carl's Australian IPv6 Pages"
|
|
target "http://oversteer.bl.echidna.id.au/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
(old content)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Belgium
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Brasil
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 do Brasil"
|
|
target "http://www.ipv6dobrasil.com.br/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
China
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Czech
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Germany
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Xing / IPv6"
|
|
target "https://www.xing.com/net/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
France
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Renater"
|
|
target "http://www.renater.fr/Projets/IPv6/index.htm"
|
|
|
|
\end_inset
|
|
|
|
: Renater IPv6 Project Page
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 - RSVP - ATM at INRIA"
|
|
target "http://www.inria.fr/recherche/equipes/ipv6.fr.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NetBSD IPv6 Documentation"
|
|
target "http://www.netbsd.org/fr/Documentation/network/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Italy
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Project6"
|
|
target "http://project6.ferrara.linux.it/"
|
|
|
|
\end_inset
|
|
|
|
: IPv6 networking with Linux
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Japan
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Yamaha IPv6"
|
|
target "http://www.rtpro.yamaha.co.jp/RT/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
(sorry, all in japanese native ...)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Korea
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ETRI"
|
|
target "http://www.krv6.net/"
|
|
|
|
\end_inset
|
|
|
|
: Electronics and Telecommunications Research Institut
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Forum Korea"
|
|
target "http://www.ipv6.or.kr/english/index.new.htm"
|
|
|
|
\end_inset
|
|
|
|
: Korean IPv6 Deployment Project
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Mexico
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Mexico"
|
|
target "http://www.ipv6.unam.mx/"
|
|
|
|
\end_inset
|
|
|
|
(spain & english version): IPv6 Project Hompeage of The National Autonomous
|
|
University of Mexico (UNAM)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Netherland
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SURFnet"
|
|
target "http://www.ipv6.surfnet.nl/"
|
|
|
|
\end_inset
|
|
|
|
: SURFnet IPv6 Backbone
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "STACK"
|
|
target "http://www.stack.nl/"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "STACK (IPv6)"
|
|
target "http://www.stack.nl/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
: Students' computer association of the Eindhoven University of Technology,
|
|
Netherland
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPng.nl"
|
|
target "http://www.ipng.nl/"
|
|
|
|
\end_inset
|
|
|
|
: collaboration between WiseGuys and Intouch
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Portugal
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Russia
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Forum for Russia"
|
|
target "http://www.ipv6.ru/"
|
|
|
|
\end_inset
|
|
|
|
: Yaroslavl State University Internet Center
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Switzerland
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
United Kingdom
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "British Telecom IPv6 Home"
|
|
target "http://www.bt.com/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
: BT's ISP IPv6 Trial, UK's first IPv6 Internet Exchange etc.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
By operating systems
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
*BSD
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "KAME project"
|
|
target "http://www.kame.net/"
|
|
|
|
\end_inset
|
|
|
|
(*BSD)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NetBSD's IPv6 Networking FAQ"
|
|
target "http://www.netbsd.org/Documentation/network/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "FreeBSD Ports: Ipv6"
|
|
target "http://www.freebsd.org/ports/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Cisco IOS
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Cisco IOS IPv6 Entry Page"
|
|
target "http://www.cisco.com/warp/public/732/Tech/ipv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 for Cisco IOS Software"
|
|
target "http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122newft/122t/122t2/ipv6/ftipv6c.htm"
|
|
|
|
\end_inset
|
|
|
|
, File 2 of 3: Aug 2002 -- Table of Contents: IPv6 for Cisco IOS Software;
|
|
Configuring Documentation Specifics; Enabling IPv6 Routing and Configuring;
|
|
IPv6 Addressing; Enabling IPv6 Processing Globally.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Cisco Internet Networking Handbook,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Chapter IPv6"
|
|
target "http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ipv6.htm"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
HPUX
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "comp.sys.hp.hpux FAQ"
|
|
target "http://www.faqs.org/faqs/hp/hpux-faq/index.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IBM
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Now that IBM's announced the availability of z/OS V1.4,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "what's new in this release?"
|
|
target "http://search390.techtarget.com/ateQuestionNResponse/0,289625,sid10_cid486367_tax292523,00.html"
|
|
|
|
\end_inset
|
|
|
|
This question was posed on 15 August 2002
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Microsoft
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Microsoft Windows 2000 IPv6"
|
|
target "http://www.microsoft.com/windows2000/technologies/communications/ipv6/default.asp"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "MSRIPv6"
|
|
target "http://www.research.microsoft.com/msripv6"
|
|
|
|
\end_inset
|
|
|
|
- Microsoft Research Network - IPv6 Homepage
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Internet Connection Firewall Does Not Block Internet Protocol Version 6 Traffic"
|
|
target "http://support.microsoft.com/default.aspx?scid=kb;en-us;306203"
|
|
|
|
\end_inset
|
|
|
|
(6.11.2001)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Internet Protocol Numbers"
|
|
target "http://support.microsoft.com/default.aspx?scid=kb;en-us;289892"
|
|
|
|
\end_inset
|
|
|
|
(8.10.2002)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Technology Preview Refresh"
|
|
target "http://support.microsoft.com/default.aspx?scid=kb;en-us;273826"
|
|
|
|
\end_inset
|
|
|
|
(16.10.2002)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "HOW TO: Install and Configure IP Version 6 in Windows .NET Enterprise Server"
|
|
target "http://support.microsoft.com/default.aspx?scid=kb;en-us;325449"
|
|
|
|
\end_inset
|
|
|
|
(26.10.2002)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Windows .NET Server 6to4 Router Service Quits When You Advertise a 2002 Address on the Public Interface"
|
|
target "http://support.microsoft.com/default.aspx?scid=kb;en-us;329984"
|
|
|
|
\end_inset
|
|
|
|
(28.10.2002)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "msdn - Microsoft Windows CE .NET - IPv6 commands"
|
|
target "http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcetcpip/htm/cmconIPv6exe.asp"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Solaris
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Sun Microsystems Solaris"
|
|
target "http://www.sun.com/software/solaris/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Solaris 2 Frequently Asked Questions (FAQ) 1.73"
|
|
target "http://www.cs.uu.nl/wais/html/na-dir/Solaris2/FAQ.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Sumitoma
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Sumitomo Electric has implemented IPv6 on Suminet 3700 family routers"
|
|
target "http://playground.sun.com/pub/ipng/html/ipng-implementations.html#Sumitomo"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ZebOS
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
IpInfusion's
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ZebOS Server Routing Software"
|
|
target "http://www.ipinfusion.com/products/server/products_server.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6andsecurity"
|
|
|
|
\end_inset
|
|
|
|
IPv6 Security
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Internet Security Systems: Security Center,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "X-Force Database Search"
|
|
target "http://www.iss.net/security_center/search.php?type=3&type=3&pattern=IPv6"
|
|
|
|
\end_inset
|
|
|
|
(21.12.2002 - 6 topics found relating to IPv6)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NIST IPsec Project"
|
|
target "http://csrc.nist.gov/ipsec/"
|
|
|
|
\end_inset
|
|
|
|
( National Institute of Standards and Technology, NIST)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Information Security"
|
|
target "http://www.infosecuritymag.com/index.shtml"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NewOrder.box.sk (search for IPv6)"
|
|
target "http://neworder.box.sk/search.php3?srch=IPv6"
|
|
|
|
\end_inset
|
|
|
|
(Articles, exploits, files database etc.)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Application lists
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DeepSpace6 / IPv6 Status Page"
|
|
target "http://www.deepspace6.net/docs/ipv6_status_page_apps.html"
|
|
|
|
\end_inset
|
|
|
|
(
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Mirror"
|
|
target "http://mirrors.bieringer.de/www.deepspace6.net/docs/ipv6_status_page_apps.html"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6.org / IPv6 enabled applications"
|
|
target "http://www.ipv6.org/v6-apps.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Freshmeat / IPv6 search"
|
|
target "http://freshmeat.net/search/?q=IPv6"
|
|
|
|
\end_inset
|
|
|
|
, currently (14 Dec 2002) 62 projects
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Forum / Web Links"
|
|
target "http://www.ipv6forum.com/modules.php?op=modload&name=Web_Links&file=index"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Analyzer tools
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Wireshark"
|
|
target "http://www.wireshark.org/"
|
|
|
|
\end_inset
|
|
|
|
(former known as
|
|
\emph on
|
|
Ethereal
|
|
\emph default
|
|
) is a free network protocol analyzer for Unix and Windows
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Radcom RC100-WL"
|
|
target "http://www.ip6.com/us/analyzer.htm"
|
|
|
|
\end_inset
|
|
|
|
- Download Radcom RC100-WL protocol analyzer version 3.20
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 Products
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "6wind"
|
|
target "http://www.6wind.com/"
|
|
|
|
\end_inset
|
|
|
|
- solutions for IPv4/IPv6 Router, QoS, Multicast, Mobility, Security/VPN/Firewa
|
|
ll.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Fefe's patches for IPv6 with djbdns"
|
|
target "http://www.fefe.de/dns/"
|
|
|
|
\end_inset
|
|
|
|
Aug 2002 -- What is djbdns and why does it need IPv6? djbdns is a full blown
|
|
DNS server which outperforms BIND in nearly all respects.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ZebOS Server Routing Suite "
|
|
target "http://www.ipinfusion.com/products/server/products_server.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SPA Mail Server 2.21 "
|
|
target "http://download.com.com/3000-2165-10153543.html?tag=lst-0-21"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Inframail (Advantage Server Edition) 6.0 "
|
|
target "http://download.com.com/3000-2165-8202652.html?tag=lst-0-2"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "HTTrack Website Copier"
|
|
target "http://download.com.com/3000-2377-10149393.html?tag=lst-0-1"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "CommView 5.0"
|
|
target "http://download.com.com/3000-2085-10132748.html?tag=lst-0-1"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Posadis 0.50.6"
|
|
target "http://download.com.com/3000-2104-10149750.html?tag=lst-0-1"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-snmp"
|
|
|
|
\end_inset
|
|
|
|
SNMP
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "comp.protocpols.snmp SNMP FAQ Part 1 of 2"
|
|
target "http://www.cs.uu.nl/wais/html/na-dir/snmp-faq/part1.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
IPv6 Infrastructure
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Statistics
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 routing table history"
|
|
target "http://www.space.net/~gert/RIPE/"
|
|
|
|
\end_inset
|
|
|
|
created by Gert Döring,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Space.Net"
|
|
target "http://www.space.net/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Official 6bone Webserver list Statisic"
|
|
target "http://6bone.informatik.uni-leipzig.de/ipv6/stats/stats.php3"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Internet Exchanges
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Another list of IPv6 Internet Exchanges can be found here:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 status of IXPs in Europe"
|
|
target "http://www.euro-ix.net/isp/choosing/search/matrix.php"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-estonia"
|
|
|
|
\end_inset
|
|
|
|
Estonia
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "TIX"
|
|
target "http://tix.estpak.ee/"
|
|
|
|
\end_inset
|
|
|
|
(tallinn interneti exchange with ipv6 support)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-europe"
|
|
|
|
\end_inset
|
|
|
|
Europe
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Euro6IX"
|
|
target "http://www.euro6ix.net/"
|
|
|
|
\end_inset
|
|
|
|
, European IPv6 Internet Exchange Backbone
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-france"
|
|
|
|
\end_inset
|
|
|
|
France
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "French National Internet Exchange IPv6"
|
|
target "http://www.fnix6.net/"
|
|
|
|
\end_inset
|
|
|
|
(since 1.11.2002 active).
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
FNIX6 provides a free and reliable high speed FastEthernet interconnection
|
|
between ISP located in TeleCity Paris.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-germany"
|
|
|
|
\end_inset
|
|
|
|
Germany
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "INXS"
|
|
target "http://www.inxs.de/"
|
|
|
|
\end_inset
|
|
|
|
: (Cable & Wireless) Munich and Hamburg
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-japan"
|
|
|
|
\end_inset
|
|
|
|
Japan
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NSPIXP-6"
|
|
target "http://www.wide.ad.jp/nspixp6/"
|
|
|
|
\end_inset
|
|
|
|
: IPv6-based Internet Exchange in Tokyo
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "JPIX"
|
|
target "http://www.jpix.co.jp/"
|
|
|
|
\end_inset
|
|
|
|
, Tokyo
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-korea"
|
|
|
|
\end_inset
|
|
|
|
Korea
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "6NGIX"
|
|
target "http://www.ngix.ne.kr/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-netherlands"
|
|
|
|
\end_inset
|
|
|
|
Netherlands
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
|
|
\lang ngerman
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "AMS-IX"
|
|
target "http://www.ams-ix.net/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\lang english
|
|
: Amsterdam Internet Exchange
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-uk"
|
|
|
|
\end_inset
|
|
|
|
UK
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "UK6X"
|
|
target "http://www.uk6x.com/"
|
|
|
|
\end_inset
|
|
|
|
: London
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "XchangePoint"
|
|
target "http://www.xchangepoint.net/"
|
|
|
|
\end_inset
|
|
|
|
: London
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-ipv6exchanges-usa"
|
|
|
|
\end_inset
|
|
|
|
USA
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "6TAP"
|
|
target "http://www.6tap.net/"
|
|
|
|
\end_inset
|
|
|
|
: Chicago.
|
|
Supports peerings around the globe.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "PAIX"
|
|
target "http://www.paix.net/"
|
|
|
|
\end_inset
|
|
|
|
: Palo Alto
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-Tunnelbroker"
|
|
|
|
\end_inset
|
|
|
|
Tunnel broker
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
See also:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.deepspace6.net/docs/tunnelbrokers.html"
|
|
target "http://www.deepspace6.net/docs/tunnelbrokers.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-belgium"
|
|
|
|
\end_inset
|
|
|
|
Belgium
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-canada"
|
|
|
|
\end_inset
|
|
|
|
Canada
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Freenet6"
|
|
target "http://www.freenet6.net/"
|
|
|
|
\end_inset
|
|
|
|
- /48 Delegation, Canada
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Getting IPv6 Using Freenet6 on Debian"
|
|
target "http://www.linuxjournal.com/article.php?sid=5963&mode=thread&order=0"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Freenet6 creater"
|
|
target "http://www.viagenie.qc.ca/en/index.shtml"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-china"
|
|
|
|
\end_inset
|
|
|
|
China
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-estonia"
|
|
|
|
\end_inset
|
|
|
|
Estonia
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Estpak"
|
|
target "http://tunnelbroker.ipv6.estpak.ee/?tunnel&PHPSESSID=aa2184190cc2cc6d3a6f6ddd01ae3635"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-germany"
|
|
|
|
\end_inset
|
|
|
|
Germany
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "6bone Knoten Leipzig"
|
|
target "http://6bone.informatik.uni-leipzig.de/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info bez. Hackangriff (2001)"
|
|
target "http://www.mail-archive.com/ipv6@uni-muenster.de/msg00056.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-italy"
|
|
|
|
\end_inset
|
|
|
|
Italy
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Comv6"
|
|
target "http://www.comv6.com/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Bersafe"
|
|
target "http://www.bersafe.it/"
|
|
|
|
\end_inset
|
|
|
|
(Italian language)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-japan"
|
|
|
|
\end_inset
|
|
|
|
Japan
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-malaysia"
|
|
|
|
\end_inset
|
|
|
|
Malaysia
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-netherlands"
|
|
|
|
\end_inset
|
|
|
|
Netherlands
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPng Netherland"
|
|
target "http://www.ipng.nl/"
|
|
|
|
\end_inset
|
|
|
|
- Intouch, SurfNet, AMS-IX, UUNet, Cistron, RIPE NCC and AT&T are connected
|
|
at the AMS-IX.
|
|
It is possible (there are requirements...) to get an static tunnel.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "SURFnet Customers"
|
|
target "http://www.ipv6.surfnet.nl/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-norway"
|
|
|
|
\end_inset
|
|
|
|
Norway
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "UNINETT"
|
|
target "http://www.uninett.no/testnett/index.en.html"
|
|
|
|
\end_inset
|
|
|
|
- Pilot IPv6 Service (for Customers): tunnelbroker & address allocation
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Uninett-Autoupdate-HOWTO"
|
|
target "http://www.guruz.de/Uninett-Autoupdate-HOWTO"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-spain"
|
|
|
|
\end_inset
|
|
|
|
Spain
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Consulintel"
|
|
target "http://tb.consulintel.euro6ix.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-switzerland"
|
|
|
|
\end_inset
|
|
|
|
Switzerland
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-uk"
|
|
|
|
\end_inset
|
|
|
|
UK
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NTT"
|
|
target "http://www.nttv6.net/"
|
|
|
|
\end_inset
|
|
|
|
, United Kingdom - IPv6 Trial.
|
|
IPv4 Tunnel and native IPv6 leased Line connections.
|
|
POPs are located in London, UK Dusseldorf, Germany New Jersey, USA (East
|
|
Coast) Cupertino, USA (West Coast) Tokyo, Japan
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-usa"
|
|
|
|
\end_inset
|
|
|
|
USA
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ESnet"
|
|
target "http://www.es.net/hypertext/welcome/pr/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
, USA - Energy Sciences Network: Tunnel Registry & Address Delegation for
|
|
directly connected ESnet sites and ESnet collaborators.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Hurricane Electric"
|
|
target "http://ipv6tb.he.net/"
|
|
|
|
\end_inset
|
|
|
|
, US backbone;
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Hurrican Electric Tunnelbroker"
|
|
target "http://tunnelbroker.net/"
|
|
|
|
\end_inset
|
|
|
|
(also available under
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://tunnelbroker.com/"
|
|
target "http://tunnelbroker.com/"
|
|
|
|
\end_inset
|
|
|
|
)
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Press Release:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Hurricane Electric Upgrades IPv6 Tunnel Broker"
|
|
target "http://www.he.net/releases/release6.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Tunnel Broker Endpoint Autoupdate"
|
|
target "http://ipv6.he.net/tunnelbroker-update.php"
|
|
|
|
\end_inset
|
|
|
|
, Perl Script
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-singapore"
|
|
|
|
\end_inset
|
|
|
|
Singapore
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-tunnelbroker-more"
|
|
|
|
\end_inset
|
|
|
|
More Tunnel brokers...
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Public 6to4 relay routers"
|
|
target "http://www.kfu.com/~nsayer/6to4/"
|
|
|
|
\end_inset
|
|
|
|
(MS IIE boycott!)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-infrastructure-nativeipv6service"
|
|
|
|
\end_inset
|
|
|
|
Native IPv6 Services
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: These services are mostly only available with a valid IPv6 connection!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-nativeipv6nntp"
|
|
|
|
\end_inset
|
|
|
|
Net News (NNTP)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-nativeipv6gameserver"
|
|
|
|
\end_inset
|
|
|
|
Game Server
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Quake2"
|
|
target "http://www.viagenie.qc.ca/en/ipv6/quake2/ipv6-quake2.shtml"
|
|
|
|
\end_inset
|
|
|
|
over IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-nativeipv6ircserver"
|
|
|
|
\end_inset
|
|
|
|
IRC Server
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Radio Stations, Music Streams
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-nativeipv6webserver"
|
|
|
|
\end_inset
|
|
|
|
Webserver
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Peter Bieringer's Home of Linux IPv6 HOWTO "
|
|
target "http://www.ipv6.bieringer.de/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-maillists"
|
|
|
|
\end_inset
|
|
|
|
Maillists
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Lists of maillists are available at:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DeepSpace6 / Mailling Lists"
|
|
target "http://www.deepspace6.net/sections/lists.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Major Mailinglists are listed in following table:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset Tabular
|
|
<lyxtabular version="3" rows="8" columns="6">
|
|
<features tabularvalignment="middle">
|
|
<column alignment="center" valignment="top" width="0pt">
|
|
<column alignment="center" valignment="top" width="0pt">
|
|
<column alignment="center" valignment="top" width="0pt">
|
|
<column alignment="center" valignment="top" width="0pt">
|
|
<column alignment="center" valignment="top" width="0pt">
|
|
<column alignment="center" valignment="top" width="0pt">
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Focus
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Request e-mail address
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
What to subscribe
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Maillist e-mail address
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Language
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Access through WWW
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Linux kernel networking including IPv6
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
majordomo (at) vger.kernel.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
netdev
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
netdev (at) vger.kernel.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
English
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info"
|
|
target "http://vger.kernel.org/vger-lists.html#netdev"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Archive"
|
|
target "http://www.spinics.net/lists/netdev/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Mobile IP(v6) for Linux
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Web-based, see URL
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
mipl
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
mipl (at) mobile-ipv6.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
English
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info"
|
|
target "http://www.mobile-ipv6.org/cgi-bin/mailman/listinfo"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Archive"
|
|
target "http://www.mobile-ipv6.org/pipermail/mipl/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Linux IPv6 users using USAGI extension
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
usagi-users-ctl (at) linux-ipv6.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
usagi-users (at) linux-ipv6.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
English
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info / Search"
|
|
target "http://www.linux-ipv6.org/ml/index.html#usagi-users"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Archive"
|
|
target "http://www.linux-ipv6.org/ml/usagi-users/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
IPv6 on Debian Linux
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
debian-ipv6 (at) lists.debian.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
English
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info/Subscription/Archive"
|
|
target "http://lists.debian.org/debian-ipv6/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
6bone
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
majordomo (at) isi.edu
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
6bone
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
6bone (at) isi.edu
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
English
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info"
|
|
target "http://www.6bone.net/6bone_email.html"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Archive"
|
|
target "http://mailman.isi.edu/pipermail/6bone/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
IPv6 users in general
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
majordomo (at) ipv6.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
users
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
users (at) ipv6.org
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
English
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info"
|
|
target "http://www.ipv6.org/mailing-lists.html"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Archive"
|
|
target "http://www.mail-archive.com/users@ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
<row>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
Bugtracking of Internet applications (1)
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
bugtraq-subscribe (at) securityfocus.com
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
bugtraq (at) securityfocus.com (2)
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
English
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
|
\begin_inset Text
|
|
|
|
\begin_layout Plain Layout
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Info"
|
|
target "http://online.securityfocus.com/popups/forums/bugtraq/intro.shtml"
|
|
|
|
\end_inset
|
|
|
|
,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Archive"
|
|
target "http://online.securityfocus.com/archive/1"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\end_inset
|
|
</cell>
|
|
</row>
|
|
</lyxtabular>
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
(1) very recommended if you provide server applications.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\lang ngerman
|
|
(2) list is moderated.
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Following other maillinglists & newsgroups are available via web:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "student-ipv6 (India)"
|
|
target "http://groups.yahoo.com/group/student-ipv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Description: This is the group for the Student Awareness group of IPv6 in
|
|
India
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "sun-ipv6-users"
|
|
target "http://groups.yahoo.com/group/sun-ipv6-users"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Description: Please report problems/suggestions regarding SUN Microsystems
|
|
IPng implementation
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6-BITS"
|
|
target "http://groups.yahoo.com/group/IPv6-BITS"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Description: This List will co-ordinate the working of Project Vertebrae.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "linux-bangalore-ipv6"
|
|
target "http://groups.yahoo.com/group/linux-bangalore-ipv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Description: The IPv6 deployment list of the Bangalore Linux User Group
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "packet-switching"
|
|
target "http://groups.yahoo.com/group/packet-switching"
|
|
|
|
\end_inset
|
|
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Description: This mailing list provides a forum for discussion of packet
|
|
switching theory, technology, implementation and application in any relevant
|
|
aspect including without limitation LAPB, X.25, SDLC, P802.1d, LLC, IP, IPv6,
|
|
IPX, DECNET, APPLETALK, FR, PPP, IP Telephony, LAN PBX systems, management
|
|
protocols like SNMP, e-mail, network transparent window systems, protocol
|
|
implementation, protocol verification, conformance testing and tools used
|
|
in maintaining or developing packet switching systems.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
de.comm.protocols.tcp-ip
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Description: Umstellung auf IPv6
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Source:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Chartas der Newsgruppen in de.*"
|
|
target "http://www.faqs.org/faqs/de-newsgroups/chartas/index.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Google Group:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "comp.protocols.tcp-ip"
|
|
target "http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF8&safe=off&group=comp.protocols.tcp-ip"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Google Group:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "linux.debian.maint.ipv6"
|
|
target "http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF8&safe=off&group=linux.debian.maint.ipv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Google Group:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "microsoft.public.platformsdk.networking.ipv6"
|
|
target "http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF8&safe=off&group=microsoft.public.platformsdk.networking.ipv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Google Group:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "fa.openbsd.ipv6"
|
|
target "http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF8&safe=off&group=fa.openbsd.ipv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-onlinetesttools"
|
|
|
|
\end_inset
|
|
|
|
Online tools
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Testing tools
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ping, traceroute, tracepath, 6bone registry, DNS:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "JOIN / Testtools"
|
|
target "http://www.join.uni-muenster.de/lab/testtools.html"
|
|
|
|
\end_inset
|
|
|
|
(German language only, but should be no problem for non German speakers)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
traceroute6, whois:
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPng.nl"
|
|
target "http://www.ipng.nl/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
AAAA Lookup Checker
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.cnri.dit.ie/cgi-bin/check_aaaa.pl"
|
|
target "http://www.cnri.dit.ie/cgi-bin/check_aaaa.pl"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Information retrievement
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "List of worldwide all IPv6-aggregated IP-Blocks"
|
|
target "http://www.ripe.net/ripencc/mem-services/registration/ipv6/ipv6allocs.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
IPv6 Looking Glasses
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DRENv6 Looking Glass"
|
|
target "http://www.v6.dren.net/lg/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Helper applications
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 Prefix Calculator"
|
|
target "http://www.tdoi.org/prefcalc.php"
|
|
|
|
\end_inset
|
|
|
|
by
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "TDOI"
|
|
target "http://www.tdoi.org/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DNS record checker"
|
|
target "http://www.maths.tcd.ie/cgi-bin/check_dns.pl"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-trainingsandseminars"
|
|
|
|
\end_inset
|
|
|
|
Trainings, Seminars
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "CIW Internetworking Professional Training CBT CD"
|
|
target "http://www.e-trainonline.com/html/ciw_internetworking_profession.html#IPv6"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
|
|
\lang ngerman
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Training Pages"
|
|
target "http://www.trainingpages.com/x/category,kw-1628,.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\lang english
|
|
, U.K.
|
|
- Search for IPv6 (13 Courses, 2006-08-21)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Erion IPv6 Training"
|
|
target "http://www.erion.co.uk/ipv6.html"
|
|
|
|
\end_inset
|
|
|
|
, UK
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Something missing? Suggestions are welcome!
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "information-onlinediscovery"
|
|
|
|
\end_inset
|
|
|
|
'The Online Discovery' ...
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
IPv6: Addressing The Needs Of the Future by Yankee Group (Author)
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
List Price: $595.00
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Edition: e-book (Acrobat Reader)
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Pages: 3 (three)
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
Publisher: MarketResearch.com; ISBN B00006334Y; (November 1, 2001)
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
;-) The number of copies would be interesting...
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
Revision history / Credits / The End
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "revision-history"
|
|
|
|
\end_inset
|
|
|
|
Revision history
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Versions x.y are published on the Internet.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Versions x.y.z are work-in-progress and published as LyX and SGML file on
|
|
CVS.
|
|
Because Deep Space 6 mirrors these SGML files and generate independend
|
|
from TLDP public versions, this versions will show up there and also on
|
|
its mirrors.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Releases 0.x
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.66 2010-04-20/PB: extend QoS section with examples, 20130513/PB: add IPv6
|
|
NAT hints
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.65 2009-12-13/PB: minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.64 2009-06-11/PB: extend DHCP server examples (ISC DHCP, Dibbler)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.63 2009-02-14/PB: Fix FSF address, major update on 4in6 tunnels, add new
|
|
section for address resolving, add some URLs, remove broken URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.62 2008-11-09/PB: Adjust URL to Turkish howto, add some HIP related URLs,
|
|
remove broken URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.61.1 2007-11-11/PB: fix broken description of shortcut BIND
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.61 2007-10-06/PB: fix broken URLs to TLDP-CVS, minor URL update.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.60.2 2007-10-03/PB: fix description of sysctl/autoconf (credits to Francois-Xavi
|
|
er Le Bail)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.60.1 2007-06-16/PB: speling fixes (credits to Larry W.
|
|
Burton)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.60 2007-05-29/PB: import major contribution to Programming using C-API
|
|
written by John Wenker, minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.52 2007-05-23/PB: update firewalling chapter, improve document for proper
|
|
SGML validation, minor bugfixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.51 2006-11-08/PB: remove broken URLs, add a new book (credits to Bryan
|
|
Vukich)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.50.2 2006-10-25/PB: fix typo in dhcp6 section (credits to Michele Ferritto)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.50.1 2006-09-23/PB: add some URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.50 2006-08-24/PB: check RFC URLs, fix URL to Chinese translation, finalize
|
|
for publishing
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.49.5 2006-08-23/PB: fix/remove broken URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.49.4 2006-08-21/PB: some review, update and enhancement of the content,
|
|
replace old 6bone example addresses with the current defined ones.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.49.3 2006-08-20/PB: fix bug in maillist entries, 'mobility' is now a separate
|
|
chapter
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.49.2 2006-08-20/PB: update and cleanup of maillist entries
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.49.1 2006-06-13/PB: major update of mobility section (contributed by Benjamin
|
|
Thery)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.49 2005-10-03/PB: add configuration hints for DHCPv6, major broken URL
|
|
cleanup (credits to Necdet Yucel)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.48.1 2005-01-15/PB: minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.48 2005-01-11/PB: grammar check and minor review of IPv6 IPsec section
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.47.1 2005-01-01/PB: add information and examples about IPv6 IPsec, add some
|
|
URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.47 2004-08-30/PB: add some notes about proftpd, vsftpd and other daemons,
|
|
add some URLs, minor fixes, update status of Spanish translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.46.4 2004-07-19/PB: minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.46.3 2004-06-23/PB: add note about started Greek translation, replace Taiwanese
|
|
with Chinese for related translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.46.2 2004-05-22/PB: minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.46.1 2004-04-18/PB: minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.46 2004-03-04/PB: announce Italian translation, add information about DHCPv6,
|
|
minor updates
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.45.1 2004-01-12/PB: add note about the official example address space
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.45 2004-01-11/PB: minor fixes, add/fix some URLs, some extensions
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.44.2 2003-10-30/PB: fix some copy&paste text bugs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.44.1 2003-10-19/PB: add note about start of Italian translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.44 2003-08-15/PB: fix URLs, add hint on tcp_wrappers (about broken notation
|
|
in some versions) and Apache2
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.43.4 2003-07-26/PB: fix URL, add archive URL for maillist users at ipv6.org,
|
|
add some ds6 URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.43.3 2003-06-19/PB: fix typos
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.43.2 2003-06-11/PB: fix URL
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.43.1 2003-06-07/PB: fix some URLs, fix credits, add some notes at IPsec
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.43 2003-06-05/PB: add some notes about configuration in SuSE Linux, add
|
|
URL of French translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.42 2003-05-09/PB: minor fixes, announce French translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.41.4 2003-05-02/PB: Remove a broken URL, update some others.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.41.3 2003-04-23/PB: Minor fixes, remove a broken URL, fix URL to Taiwanese
|
|
translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.41.2 2003-04-13/PB: Fix some typos, add a note about a French translation
|
|
is in progress
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.41.1 2003-03-31/PB: Remove a broken URL, fix another
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.41 2003-03-22/PB: Add URL of German translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.40.2 2003-02-27/PB: Fix a misaddressed URL
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.40.1 2003-02-12/PB: Add Debian-Linux-Configuration, add a minor note on
|
|
translations
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.40 2003-02-10/PB: Announcing available German version
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.39.2 2003-02-10/GK: Minor syntax and spelling fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.39.1 2003-01-09/PB: fix an URL (draft adopted to an RFC)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.39 2003-01-13/PB: fix a bug (forgotten 'link
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
on
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip link set
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
(credits to Yaniv Kaul)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.38.1 2003-01-09/PB: a minor fix
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.38 2003-01-06/PB: minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.37.1 2003-01-05/PB: minor updates
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.37 2002-12-31/GK: 270 new links added (searched in 1232 SearchEngines)
|
|
in existing and 53 new (sub)sections
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.36.1 2002-12-20/PB: Minor fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.36 2002-12-16/PB: Check of and fix broken links (credits to Georg Käfer),
|
|
some spelling fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.35 2002-12-11/PB: Some fixes and extensions
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.34.1 2002-11-25/PB: Some fixes (e.g.
|
|
broken linuxdoc URLs)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.34 2002-11-19/PB: Add information about German translation (work in progress),
|
|
some fixes, create a small shortcut explanation list, extend
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
used terms
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and add two German books
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.33 2002-11-18/PB: Fix broken RFC-URLs, add parameter ttl on 6to4 tunnel
|
|
setup example
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.32 2002-11-03/PB: Add information about Taiwanese translation
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.31.1 2002-10-06/PB: Add another maillist
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.31 2002-09-29/PB: Extend information in proc-filesystem entries
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.30 2002-09-27/PB: Add some maillists
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.29 2002-09-18/PB: Update statement about nmap (triggered by Fyodor)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.28.1 2002-09-16/PB: Add note about ping6 to multicast addresses, add some
|
|
labels
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.28 2002-08-17/PB: Fix broken LDP/CVS links, add info about Polish translation,
|
|
add URL of the IPv6 Address Oracle
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.27 2002-08-10/PB: Some minor updates
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.26.2 2002-07-15/PB: Add information neighbor discovery, split of firewalling
|
|
(got some updates) and security into extra chapters
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.26.1 2002-07-13/PB: Update nmap/IPv6 information
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.26 2002-07-13/PB: Fill /proc-filesystem chapter, update DNS information
|
|
about depricated A6/DNAME, change P-t-P tunnel setup to use of
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
only
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.25.2 2002-07-11/PB: Minor spelling fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.25.1 2002-06-23/PB: Minor spelling and other fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.25 2002-05-16/PB: Cosmetic fix for 2^128, thanks to José Abílio Oliveira
|
|
Matos for help with LyX
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.24 2002-05-02/PB: Add entries in URL list, minor spelling fixes
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.23 2002-03-27/PB: Add entries in URL list and at maillists, add a label
|
|
and minor information about IPv6 on RHL
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.22 2002-03-04/PB: Add info about 6to4 support in kernel series 2.2.x and
|
|
add an entry in URL list and at maillists
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.21 2002-02-26/PB: Migrate next grammar checks submitted by John Ronan
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.20.4 2002-02-21/PB: Migrate more grammar checks submitted by John Ronan,
|
|
add some additional hints at DNS section
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.20.3 2002-02-12/PB: Migrate a minor grammar check patch submitted by John
|
|
Ronan
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.20.2 2002-02-05/PB: Add mipl to maillist table
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.20.1 2002-01-31/PB: Add a hint how to generate 6to4 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.20 2002-01-30/PB: Add a hint about default route problem, some minor updates
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.19.2 2002-01-29/PB: Add many new URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.19.1 2002-01-27/PB: Add some forgotten URLs
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.19 2002-01-25/PB: Add two German books, fix quote entinities in exported
|
|
SGML code
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.18.2 2002-01-23/PB: Add a FAQ on the program chapter
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.18.1 2002-01-23/PB: Move
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
the end
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
to the end, add USAGI to maillists
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.18 2002-01-22/PB: Fix bugs in explanation of multicast address types
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.17.2 2002-01-22/PB: Cosmetic fix double existing text in history (at 0.16),
|
|
move all credits to the end of the document
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.17.1 2002-01-20/PB: Add a reference, fix URL text in online-test-tools
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.17 2002-01-19/PB: Add some forgotten information and URLs about global
|
|
IPv6 addresses
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.16 2002-01-19/PB: Minor fixes, remove
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
bold
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
and
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
emphasize
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
formats on code lines, fix
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
too long unwrapped code lines
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
using selfmade utility, extend list of URLs.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.15 2002-01-15/PB: Fix bug in addresstype/anycast, move content related
|
|
credits to end of document
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.14 2002-01-14/PB: Minor review at all, new chapter
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
debugging
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, review
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
addresses
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, spell checking, grammar checking (from beginning to 3.4.1) by Martin Krafft,
|
|
add tcpdump examples, copy firewalling/netfilter6 from IPv6+Linux-HowTo,
|
|
minor enhancements
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.13 2002-01-05/PB: Add example BIND9/host, move revision history to end
|
|
of document, minor extensions
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.12 2002-01-03/PB: Merge review of David Ranch
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.11 2002-01-02/PB: Spell checking and merge review of Pekka Savola
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
0.10 2002-01-02/PB: First public release of chapter 1
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "credits"
|
|
|
|
\end_inset
|
|
|
|
Credits
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
The quickest way to be added to this nice list is to send bug fixes, corrections
|
|
, and/or updates to me ;-).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If you want to do a major review, you can use the native LyX file (see
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "original source"
|
|
reference "general-original-source"
|
|
|
|
\end_inset
|
|
|
|
) and send diffs against it, because diffs against SGML don't help too much.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "major-credits"
|
|
|
|
\end_inset
|
|
|
|
Major credits
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
David Ranch <dranch at trinnet dot net>: For encouraging me to write this
|
|
HOWTO, his editorial comments on the first few revisions, and his contributions
|
|
to various IPv6 testing results on my IPv6 web site.
|
|
Also for his major reviews and suggestions.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Pekka Savola <pekkas at netcore dot fi>: For major reviews, input and suggestion
|
|
s.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Martin F.
|
|
Krafft <madduck at madduck dot net>: For grammar checks and general reviewing
|
|
of the document.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
John Ronan <j0n at tssg dot wit dot ie>: For grammar checks.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Georg Käfer <gkaefer at gmx dot at>: For detection of no proper PDF creation
|
|
(fixed now by LDP maintainer Greg Ferguson), input for German books, big
|
|
list of URLs, checking all URLs, many more suggestions, corrections and
|
|
contributions, and the German translation
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Michel Boucey <mboucey at free dot fr>: Finding typos and some broken URLs,
|
|
contribute some suggestions and URLs, and the French translation
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Michele Ferritto <m dot ferritto at virgilio dot it>: Finding bugs and the
|
|
Italian translation
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Daniel Roesen <dr at cluenet dot de>: For grammar checks
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Benjamin Thery <benjamin dot thery at bull dot net>: For contribution of
|
|
updated mobility section
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
John Wenker <jjw at pt dot com>: major contribution to Programming using
|
|
C-API
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Srivats P.
|
|
<Srivats dot P at conexant dot com>: major contribution for 4in6 tunnels
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Other credits
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Document technique related
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Writing a LDP HOWTO as a newbie (in LyX and exporting this to DocBook to
|
|
conform to SGML) isn't as easy as some people say.
|
|
There are some strange pitfalls...
|
|
Nevertheless, thanks to:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Authors of the
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "LDP Author Guide"
|
|
target "http://www.tldp.org/LDP/LDP-Author-Guide/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
B.
|
|
Guillon: For his
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "DocBook with LyX HOWTO"
|
|
target "http://perso.libertysurf.fr/bgu/doc/db4lyx/"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "content-related-credits"
|
|
|
|
\end_inset
|
|
|
|
Content related credits
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Credits for fixes and hints are listed here, will grow sure in the future
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
S .P.
|
|
Meenakshi <meena at cs dot iitm dot ernet dot in>: For a hint using a
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
send mail
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
shell program on tcp_wrapper/hosts.deny
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Frank Dinies <FrankDinies at web dot de>: For a bugfix on IPv6 address explanati
|
|
on
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
John Freed <jfreed at linux-mag dot com>: For finding a bug in IPv6 multicast
|
|
address explanation
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Craig Rodrigues <crodrigu at bbn dot com>: For suggestion about RHL IPv6
|
|
setup
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Fyodor <fyodor at insecure dot org>: Note me about outdated nmap information
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Mauro Tortonesi <mauro at deepspace6 dot net>: For some suggestions
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tom Goodale <goodale at aei-potsdam dot mpg dot de>: For some suggestions
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Martin Luemkemann <mluemkem at techfak dot uni-bielefeld dot de>: For a
|
|
suggestion
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Jean-Marc V.
|
|
Liotier <jim at jipo dot com>: Finding a bug
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Yaniv Kaul <ykaul at checkpoint dot com>: Finding a bug
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Arnout Engelen <arnouten at bzzt dot net>: For sending note about a draft
|
|
was adopted to RFC now
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Stephane Bortzmeyer <bortzmeyer at nic dot fr>: Contributing persistent
|
|
configuration on Debian
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
lithis von saturnsys <lithis at saturnsys dot com>: Reporting a misaddressed
|
|
URL
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Guy Hulbert <gwhulbert at rogers dot com>: Send a note that RFC1924 is probably
|
|
an April fool's joke
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tero Pelander <tpeland at tkukoulu dot fi>: Reporting a broken URL
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Walter Jontofsohn <wjontof at gmx dot de>: Hints for SuSE Linux 8.0/8.1
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Benjamin Hofstetter <benjamin dot hofstetter at netlabs dot org>: Reporting
|
|
a mispointing URL
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
J.P.
|
|
Larocque <piranha at ely dot ath dot cx>: Reporting archive URL for maillist
|
|
users at ipv6 dot org
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Jorrit Kronjee <jorrit at wafel dot org>: Reporting broken URLs
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Colm MacCarthaigh <colm dot maccarthaigh at heanet dot ie>: Hint for sendfile
|
|
issue on Apache2
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tiago Camilo <tandre at ipg dot pt>: Contribute some URLs about Mobile IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Harald Geiger: Reporting a bug in how described the bit counting of the
|
|
universal/global bit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Bjoern Jacke <bjoern at j3e dot de>: Triggered me to fix some outdated informati
|
|
on on xinetd
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Christoph Egger <cegger at chrrr dot com>: Sending note about
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
has problems with IPv4-compatible addresses on SuSE Linux 9.0 and trigger
|
|
to add a hint on 6to4-radvd example
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
David Lee Haw Ling <hawling at singnet dot com dot sg>: Sending information
|
|
about a tunnel broker
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Michael H.
|
|
Warfield <mhw at iss dot net>: Sending note about suffix for 6to4 routers
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tomasz Mrugalski <thomson at klub dot com dot pl>: Sending updates for DHCPv6
|
|
section
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Jan Minar <jjminar at fastmail dot fm>: Reporting minor bugs
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Kalin KOZHUHAROV <kalin at tar dot bz>: Fixing a not so well explanation
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Roel van Dijk <rdvdijk at planet dot nl>: Reporting broken URLs
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Catalin Muresan <catalin dot muresan at astral dot ro>: Reporting minor
|
|
bugs
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Dennis van Dok <dvandok at quicknet dot nl>: Reporting minor bugs
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Necdet Yucel <nyucel at comu dot edu dot tr>: Reporting broken URLs
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Bryan Vukich: Reporting a broken URL
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Daniele Masini: reporting a broken iptables example
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Yao Zhao: reporting a bug in IPv6 route remove description
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Aaron Kunde: reporting a broken URL and a content related bug
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Larry W.
|
|
Burton: speling fixes
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Justin Pryzby: reporting broken shortcut description of BIND
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
The End
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Thanks for reading.
|
|
Hope it helps!
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
If you have any questions, subscribe to proper
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "maillist"
|
|
reference "information-maillists"
|
|
|
|
\end_inset
|
|
|
|
and describe your problem providing as much as information as possible.
|
|
\end_layout
|
|
|
|
\end_body
|
|
\end_document
|