mirror of https://github.com/tLDP/LDP
31479 lines
547 KiB
Plaintext
31479 lines
547 KiB
Plaintext
#LyX 2.1 created this file. For more info see http://www.lyx.org/
|
|
\lyxformat 474
|
|
\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_math auto
|
|
\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_package amsmath 1
|
|
\use_package amssymb 1
|
|
\use_package cancel 1
|
|
\use_package esint 0
|
|
\use_package mathdots 1
|
|
\use_package mathtools 1
|
|
\use_package mhchem 1
|
|
\use_package stackrel 1
|
|
\use_package stmaryrd 1
|
|
\use_package undertilde 1
|
|
\cite_engine basic
|
|
\cite_engine_type default
|
|
\biblio_style plain
|
|
\use_bibtopic false
|
|
\use_indices false
|
|
\paperorientation portrait
|
|
\suppress_date false
|
|
\justification true
|
|
\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 (pt_BR)
|
|
\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>2010-04-20</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
|
|
A meta deste HOWTO de IPv6 em Linux é responder as questões básicas e avançadas
|
|
sobre a versão 6 do protocolo IP em um sistema com Linux.
|
|
Este HOWTO dará ao leitor informação suficiente para instalar, configurar
|
|
e usar aplicações IPv6 em máquinas com o Linux.
|
|
Versões intermediárias deste HOWTO estão disponíveis nos endereços
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "mirrors.bieringer.de"
|
|
target "http://mirrors.bieringer.de/Linux+IPv6-HOWTO/"
|
|
|
|
\end_inset
|
|
|
|
ou
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "mirrors.deepspace6.net"
|
|
target "http://mirrors.deepspace6.net/Linux+IPv6-HOWTO/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Veja também
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "revision history"
|
|
reference "revision-history"
|
|
|
|
\end_inset
|
|
|
|
para saber das mudanças.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-general"
|
|
|
|
\end_inset
|
|
|
|
Geral
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As informações sobre as traduções disponíveis estão na seção
|
|
\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, licença e outros
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Copyright
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Escrito e com Copyright (C) 2001-2011 por Peter Bieringer
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Licença
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\series bold
|
|
Este Linux IPv6 HOWTO está publicado sob a licença GNU GPL versão 2
|
|
\series default
|
|
:
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Linux IPv6 HOWTO, um guia para configurar e usar o IPv6 em sistemas Linux.
|
|
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Copyright
|
|
\lang ngerman
|
|
©
|
|
\lang english
|
|
2001-2011 Peter Bieringer
|
|
\begin_inset Newline newline
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este documento é um software livre; voce pode redistribui-lo e/ou modifica-lo
|
|
sob os termos da licença GNU GPL, tal como está publicado pela Free Software
|
|
Foundation; seja pela versão 2 da Licença, ou (em sua opinião) qualquer
|
|
versão posterior.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER
|
|
GARANTIA; nem mesmo qualquer garantia de COMERCIALIZAÇÃO ou ADEQUAÇÃO PARA
|
|
UM PROPÓSITO PARTICULAR.
|
|
Veja a GNU GPL para mais detalhes.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Se voce quiser uma cópia da licença GNU GPL, solicite através de carta para
|
|
o endereço Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110, USA.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Sobre o autor
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
História do autor com a Internet e IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
1993: Eu entrei em contato com a internet utilizando um cliente de email
|
|
e news baseado em console há bastante tempo (procure por "e91abier" no
|
|
grupo
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "groups.google.com"
|
|
target "http://groups.google.com/"
|
|
|
|
\end_inset
|
|
|
|
, sou eu).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
1996: Foi solicitado que eu produzisse um curso de IPv6, incluindo um workshop
|
|
com o Sistema Operacional Linux.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
1997: Comecei escrevendo um guia sobre como instalar, configurar e utilizar
|
|
o IPv6 em Linux, chamado
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
(veja
|
|
\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
|
|
|
|
para mais informações).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
2001: Comecei a escrever este novo Linux IPv6 HOWTO.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Contato
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O autor pode ser contactado através do endereço de email <pb at bieringer
|
|
dot de> e também através de sua
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "homepage"
|
|
target "http://www.bieringer.de/pb/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Atualmente ele mora em Munique [parte nordeste de Schwabing] / Bavaria /
|
|
Alemanha (sul) / Europa (centro) / Terra (superfície).
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "general-category"
|
|
|
|
\end_inset
|
|
|
|
Categoria
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este HOWTO deve ser listado na categoria "Networking/Protocols".
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Versão, Histórico e To-Do
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Versão
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A versão atual deste documento é mostrada no começo do documento.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para outras versões ou traduções disponíveis, veja o site
|
|
\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
|
|
Histórico
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Relevantes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2001-11-30: Começo do estilo do novo HOWTO.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-01-02: Maioria do conteúdo feito, primeira publicação do capítulo 1(versão
|
|
0.10).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-01-14: Mais conteúdo, algumas revisões, e publicação do documento completo
|
|
(version 0.14).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-08-16: Tradução para o Polones em progresso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-10-31: Tradução para o Chines disponível (veja
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Translations"
|
|
reference "general-translations"
|
|
|
|
\end_inset
|
|
|
|
para mais informações)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2002-11-10: Tradução para o Alemão em progresso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-02-10: Tradução para o Alemão disponível
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-04-09: Tradução para o Frances em progresso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-05-09: Tradução para o Frances disponível
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2003-10-16: Tradução para o Italiano em progresso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2004-03-12: Tradução para o Italiano disponível
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2004-06-18: Tradução para o Grego em progresso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2005-07-25: Tradução para o Turco disponível
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2007-03-28: Tradução para o Portugues-Brazil em progresso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
2008-07-30: Tradução para o Espanhol disponível (mas ainda em progresso)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
História completa
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Veja
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "revision history"
|
|
reference "revision-history"
|
|
|
|
\end_inset
|
|
|
|
no final deste documento
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
To-Do
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Completar conteúdo que ainda falta
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Finalizar a checagem gramatical
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "general-translations"
|
|
|
|
\end_inset
|
|
|
|
Traduções
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As traduções devem sempre conter a URL, número da versão c copyright do
|
|
documento original (e o seu também).
|
|
Por favor não traduza o changelog original, pois isto não terá muita importanci
|
|
a.
|
|
Também não traduza a seção sobre traduções disponíveis, pois elas podem
|
|
estar desatualizadas.
|
|
Ao invés disso, adicione uma URL para a seção em Ingles deste HOWTO.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aparentemente a frequencia de mudança deste documento ocorre menos de uma
|
|
vez por mes.
|
|
Desde a versão 0.2.7 parece que a maioria do conteúdo que eu fiz foi escrito.
|
|
As traduções devem sempre ter a versão em ingles como original..
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Linguagens
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: uma olhada nesta URL pode ajudar
|
|
\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
|
|
Chines
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A tradução para o Chines, feito por Burma Chen <expns at yahoo dot com>
|
|
(informada a mim em 2002-10-31) e pode ser encontrada no 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
|
|
|
|
.
|
|
É uma foto da tradução, eu não sei se está atualizada.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Polones
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Desde 2002-08-16 a tradução para o Polones foi iniciada e ainda está em
|
|
progresso por Lukasz Jokiel <Lukasz dot Jokiel at klonex dot com dot pl>.
|
|
Versão usada: CVS-version 1.29 do arquivo LyX, a qual foi a origem para
|
|
a versão 0.2.7.
|
|
O status é de ainda em progresso (2004-08-30).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
German
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em 2002-11-10 a versão Alemã foi iniciada por Georg Käfer <gkaefer at gmx
|
|
dot at> iniciou a tradução para o alemão, e a primeira publicação foi feita
|
|
em 2003-02-10.
|
|
Ela está originalmenmte disponível na Deep Space 6
|
|
\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
|
|
|
|
(e também em
|
|
\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
|
|
|
|
).
|
|
Esta versão se manterá atualizada tanto quanto for possível.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Frances
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em 2003-04-09 foi iniciada a tradução da versão em Frances, por Michel Boucey
|
|
<mboucey at free dot fr> e a primeira publicação foi em 2003-05-09.
|
|
Ela está originalmente disponível na Deep Space 6
|
|
\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
|
|
|
|
(e também em
|
|
\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
|
|
Espanhol
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um membro do projeto MontevideoLibre, localizado no Uruguai (América do
|
|
Sul) iniciou a tradução para espanhol no formato wiki:
|
|
\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
|
|
Italiano
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em 2003-10-16 a tradução para uma versão em Italiano foi iniciada Michele
|
|
Ferritto <m dot ferritto at virgilio dot it> para o
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "ILDP"
|
|
target "http://ildp.pluto.linux.it/"
|
|
|
|
\end_inset
|
|
|
|
(Italian Linux Documentation Project) e a sua primeira publicação foi em
|
|
2004-03-12.
|
|
Ela está originalmente disponível no ILDP em
|
|
\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
|
|
Japones
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em 2003-05-14 Shino Taketani <shino_1305 at hotmail dot com> me enviou uma
|
|
nota dizendo que planejava traduzir o HOWTO para o japones.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Grego
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em 2004-06-18 Nikolaos Tsarmpopoulos <ntsarb at uth dot gr> me enviou uma
|
|
nota dizendo que planejava traduzir o HOWTO para o Grego.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Turco
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em 2005-07-18 Necdet Yucel <nyucel at comu dot edu dot tr> me enviou uma
|
|
nota dizendo que a tradução em Turco estava disponível.
|
|
E uma fotografia da tradução (versão 0.61) pode ser encontrada na URL
|
|
\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
|
|
Em 2011-05-06 Gustavo Mendes de Carvalho <gmcarvalho at gmail dot com> iniciou
|
|
a tradução deste HowTo para Portugues-Brazil.
|
|
A primeira tentativa realizada em 2007 por Claudemir da Luz <claudemir
|
|
dot daluz at virtuallink dot com dot br> nunca foi finalizada.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Técnico
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "general-original-source"
|
|
|
|
\end_inset
|
|
|
|
Fonte original deste HOWTO
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este HOWTO foi escrito usando LyX versão 1.6.1 em um sistema Linux Fedora
|
|
10 com o template SGML/XML (DocBook).
|
|
Ele está disponível em
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "github / tLDP / LDP / users / Peter-Bieringer"
|
|
target "https://github.com/tLDP/LDP/tree/master/LDP/users/Peter-Bieringer/"
|
|
|
|
\end_inset
|
|
|
|
para contribuições.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Divisor de linha de código
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Eu utilizei um utilitário divisor de linha de código (Code line wrapping
|
|
- "lyxcodelinewrapper.pl") feito por mim mesmo, e ele está disponível para
|
|
seu próprio uso em
|
|
\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
|
|
Geração de SGML
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O SGML/XML é gerado usando a função de exportar do LyX
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Referencias On-line para a versão em HTML deste HOWTO
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Página principal
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Como boa prática, uma referencia à página principal deste HOWTO é recomendada.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Páginas dedicadas
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Como as páginas em HTML são geradas a partir dos arquivos SGML, os nomes
|
|
dos arquivos em HTML podem ser bastante diferentes (randomicos).
|
|
Entretanto, algumas páginas são etiquetadas em LyX, resultando em nomes
|
|
estáticos.
|
|
Estas etiquetas são úteis para referencias e não deveriam ser alteradas
|
|
no futuro.
|
|
Se voce acredita que eu esqueci qualquer etiqueta, por favor me avise,
|
|
e eu colocarei.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Prefácio
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Algumas coisas antes:
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Quantas versões deste HOWTO existem por aí ?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Incluindo esta, existem 3 (tres) documentos HOWTO disponíveis.
|
|
Minhas desculpas se forem demais ;-)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Linux IPv6 FAQ/HOWTO (desatualizada)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O primeiro documento HOWTO relacionado a IPv6 foi escrito pelo Eric Osborne
|
|
e era chamado
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Linux IPv6 FAQ/HOWTO"
|
|
target "http://www.linuxhq.com/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
(por favor use-o somente para fins históricos).
|
|
Sua última versão foi a 3.2.1, lançada em 14 de Julho de 1997.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Por favor ajude: Se alguém souber a data de nascimento deste HOWTO, por
|
|
favor me envie um e-mail (estas informações são necessárias para o "histórico").
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv6 & Linux - HowTo (mantida)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Esta segunda versão existe e se chama
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
escrita por mim (Peter Bieringer) em HTML puro.
|
|
Ele nasceu em Abril de 1997 e sua primeira versão em ingles foi publicada
|
|
em Junho de 1997.
|
|
Eu vou continuar a manter esta versão, mas isto deve acontecer devagar
|
|
e não será por completo, em favor da atualização da versão do Linux IPv6
|
|
HOWTO que voce está lendo agora.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Linux IPv6 HOWTO (este documento)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Já que este
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
foi escrito em HTML puro, ele não é compatível com o
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "The Linux Documentation Project (TLDP)"
|
|
target "http://www.tldp.org/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
Eu recebi então um pedido no final de Novembro de 2001 para reescrever
|
|
este HowTo
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo"
|
|
target "http://www.bieringer.de/linux/IPv6/"
|
|
|
|
\end_inset
|
|
|
|
em SGML.
|
|
Entretanto, por causa da descontinuidade do 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
|
|
|
|
), e como o IPv6 estava ficando mais e mais padronizado, eu decidi escrever
|
|
um novo documento cobrindo os pontos básicos e um pouco avançados que permanece
|
|
ram importantes ao longo destes anos.
|
|
Algum conteúdo mais dinamico e avançado ainda pode ser encontrado neste
|
|
segundo 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
|
|
Termos usados, glossário e atalhos
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Rede
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Base
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
10 Sistema numérico muito bem conhecido e representa qualquer valor com
|
|
os dígitos 0 a 9.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Base
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
16 Geralmente usado em linguagens de programação, também conhecido como
|
|
sistema numérico hexadecimal, representa qualquer valor com os dígitos
|
|
0 a 9 e caracteres A a F (case insensitive).
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Base
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
85 Representação de um valor com 85 dígitos/caracteres diferentes, ele pode
|
|
levar a strings menores, mas nunca vi ser usado em campo.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Bit A menor unidade de armazenamento, representa on/verdade/1 e off/falso/0.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Byte Geralmente uma coleção de 8 bits (mas não é necessariamente uma verdade
|
|
- veja outros sistemas computacionais)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Device Aqui, o hardware para a conexão de rede, veja também NIC
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Dual
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
homed
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
host Um sistema dual homed é um nó com duas redes (física ou virtual) com
|
|
interfaces em dois links diferentes, mas sem encaminhar qualquer pacote
|
|
entre eles (não é um router).
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Host Geralmente um sistema single homed com somente uma interface de rede
|
|
ativa, exemplo Ethernet ou (não e) PPP.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Interface Quase sempre o mesmo que "device", veja também NIC
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
IP
|
|
\begin_inset space ~
|
|
\end_inset
|
|
|
|
Header Cabeçalho de um pacote IP (cada pacote de rede tem um cabeçalho e
|
|
seu tipo depende do nível de rede)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Link Um link é o nível 2 de rede, ou meio de transporte de pacotes.
|
|
exemplos são Ethernet, Token Ring, PPP, SLIP, ATM, ISDN, Frame Relay,...
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Node Um nó é um host ou um router.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Octet É uma coleção de 8 bits, hoje bem similar a "byte".
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Port Informação utilizada pelo TCP/UDP dispatcher (camada 4) para transportar
|
|
informações para as camadas superiores
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Protocolo Cada camada de rede que contém a maioria dos campos e informações
|
|
para tornar a vida mais fácil ao enviar a informação transportada para
|
|
as camadas superiores, veja camada 2 (MAC) e 3 (IP)
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Router Um router é um nó com 2 ou mais redes interfaces de rede (física
|
|
ou virtual), capaz de encaminhar os pacotes entre as suas interfaces.
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Socket Um socket IP é definido pelo endereço de origem e destino, e suas
|
|
portas
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Stack Relacionado às várias camadas de rede
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Subnetmask Redes IP usam bits de máscara para separar redes locais de redes
|
|
remotas
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
Tunnel Um túnel é tipicamente uma conexão ponto-a-ponto sobre a qual pacotes
|
|
são trocados, e que carregam dados de outro protocolo.
|
|
Exemplo túnel IPv6-in-IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "Glossar"
|
|
|
|
\end_inset
|
|
|
|
Atalhos
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
ACL Access Control List - Lista de controle de acesso
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
API Application Programming Interface - Interface de programação de aplicação
|
|
\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 - Provedor de serviços Internet
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
KAME Projeto - um esforço conjunto de seis companhias no Japão para fornecer
|
|
grátis uma pilha IPv6 e IPsec (para ambos IPv4 e IPv6) para as variantes
|
|
BSD existentes no mundo
|
|
\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 - No Brasil, o registro.br
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
NIC Network Interface Card
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
RFC Request For Comments - conjunto de notas técnicas organizacionais sobre
|
|
a Internet
|
|
\end_layout
|
|
|
|
\begin_layout Description
|
|
USAGI UniverSAl playGround for Ipv6 Project - trabalho para entregar uma
|
|
pilha IPv6 de qualidade para os sistemas Linux.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Informações úteis
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Sinal de divisão de linha longa de código
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O caractere especial "¬" é usado para sinalizar que esta linha de código
|
|
foi dividida para se obter uma melhor visualização em arquivos PFG e PS.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Marcadores
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nos exemplos genéricos voce encontrará as seguintes marcações:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
<myipaddress>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para o uso real em seu sistema de linha de comando ou em scripts, isto deve
|
|
ser substituído pelo conteúdo correto (removendo os sinais < e >).
|
|
Desta forma o resultado seria
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Comandos no shell
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Comandos executados no shell por usuários normais (não root) começam com
|
|
$
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
$ whoami
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Comandos executados pelo usuário root começam com #
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# whoami
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Necessidades para usar este HOWTO
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Prerequisitos pessoais
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experiencia com ferramentas Unix
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Voce deve estar familiarizado com a maioria das ferramentas Unix, como grep,
|
|
awk, find, etc.
|
|
, e saber sobre a maioria das opções mais usadas de cada um deles.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experiencia com teoria de rede
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Voce deve estar famliarizado com camadas, protocolos, endereços, cabos,
|
|
conectores, etc.
|
|
Se voce é novo nesta área, este é um bom local para voce iniciar seus estudos
|
|
\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
|
|
Experiencia com configuração IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Voce deve definitivamente ter alguma experiencia em configuração de redes
|
|
IPv4, caso contrário será difícil para voce entender o que realmente está
|
|
acontecendo.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experiencia com Domain Name System (DNS)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Permitirá a voce entender o que é um Domain Name System (DNS), que serviço
|
|
ele fornece e como usa-lo.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Experiencia com estratégias de debug de rede
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Voce deve pelo menos entender como usar o tcpdump e o que ele pode te mostrar.
|
|
Caso contrário a depuração de problemas de rede será muito difícil para
|
|
voce.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Hardware compatível com o sistema Linux
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
É claro que voce vai precisar usar algum hardware (pode ser uma maquina
|
|
virtual), e não somente ler este HOWTO para dormir.
|
|
;-7)
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-basics"
|
|
|
|
\end_inset
|
|
|
|
Básico
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
O que é IPv6?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\color none
|
|
O IPv6 é um novo protocolo de camada 3 que tem a função de substituir o
|
|
IPv4 (também conhecido apenas por IP).
|
|
O IPv4 foi projetado a muito tempo atrás(
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 760 / Internet Protocol"
|
|
target "http://www.faqs.org/rfcs/rfc760.html"
|
|
|
|
\end_inset
|
|
|
|
de Janeiro de 1980) e desde o começo tem havido muitos pedidos de atender
|
|
mais capacidades e funcionalidades.
|
|
A última RFC é
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 2460 / Internet Protocol Version 6 Specification"
|
|
target "http://www.faqs.org/rfcs/rfc2460.html"
|
|
|
|
\end_inset
|
|
|
|
.As grandes mudanças no IPv6 foram o novo formato do cabeçalho, incluindo
|
|
o tamanho da capacidade de endereços, de 32 para 128 bits.
|
|
Já que a camada 3 é a responsável por transporte de pacotes fim a fim usando
|
|
o roteamento baseado em endereços, ele deveria incluir os endereços IPv6
|
|
de origem e destino tal como o IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para mais informações sobre a história do IPv6, de uma olhada nas RFC's
|
|
mais antigas do IPv6 listadas aqui
|
|
\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
|
|
|
|
História do IPv6 no Linux
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Os anos de 1992, 1993 e 1994 do IPv6 no Linux (linhas gerais) são cobertos
|
|
pelo seguinte documento:
|
|
\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: melhorar a linha do tempo, adicionar conteúdo...
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
O começo
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O primeiro trecho de código de rede relacionado com o IPv6 foi adicionado
|
|
ao kernel 2.1.8 do Linux em novembro de 1996 por Pedro Roque.
|
|
Ele foi baseado na API do BSD:
|
|
\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
|
|
As linhas mostradas foram copiadas do patch-2.1.8 (o email foi limpo para
|
|
evitar spam).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Enquanto isso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Por conta do buraco da manpower, a implementação do IPv6 no kernel foi incapaz
|
|
de seguir os rascunhos propostos pelos novos RFC's publicados.
|
|
Em outubro de 2000, um projeto foi iniciado no Japão, chamado
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
, cujo objetivo foi implantar todo o restante, ou desatualizado, suporte
|
|
ao IPv6 para o Linux.
|
|
Ele utiliza a implementação IPv6 atual para o FreeBSD feita pelo
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "KAME project"
|
|
target "http://www.kame.net/"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
De tempos em tempos, eles criavam fotos da versão vanilla do código do
|
|
kernel do Linux.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Até a implementação do desenvolvimento na série 2.5 do kernel ter sido iniciado,
|
|
os patches do
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
eram tão grandes, que os mantenedores de rede do Linux eram incapazes de
|
|
inclui-lo completamente no código final do kernel do Linux série 2.4.x.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Durante o desenvolvimento da serie 2.5, o tentou inserir todas as suas extensões
|
|
usadas nesta série.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Atualmente
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Muito do desenvolvimento feito para o IPv6 e patches do
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
e outros estão integrados na série vanilla do kernel 2.6.x.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
O futuro
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI"
|
|
target "http://www.linux-ipv6.org/"
|
|
|
|
\end_inset
|
|
|
|
e outros ainda mantém o trabalho na implementação de novas características
|
|
e funcionalidades, como a mobilidade e outros.
|
|
De tempos em tempos, novos patches com extensões são lançados e também
|
|
integrados à série vanilla do kernel.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Como o endereço IPv6 se parece?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Como já mencionado antes, os endereços IPv6 possuem 128 bits de tamanho.
|
|
Este número de bits gera um número decimal extremamente grande, com 39
|
|
dígitos de tamanho:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2^128-1: 340282366920938463463374607431768211455
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Tais números não são endereços fáceis de serem memorizados.
|
|
Os endereços IPv6 também tem um esquema orientado a bits (assim como o
|
|
IPv4, mas não tão facilmente reconhecido).
|
|
Assim a melhor notação de números tão grandes é em formato hexadecimal.
|
|
Em hexadecimal, 4 bits (também conhecidos como "nibble") são representados
|
|
por um dígito ou caractere, de 0-9 e A-F.
|
|
Desta forma, o tamanho do endereço é reduzido para 32 caracteres.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2^128-1: 0xffffffffffffffffffffffffffffffff
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Esta representação ainda não é muito conveniente (com a possível mistura
|
|
ou perda de um único dígito hexadecimal), então os desenvolvedores do IPv6
|
|
escolheram um formato hexadecimal com um ":" separando cada bloco de 16
|
|
bits.
|
|
Com isso, o sinal inicial 0x (um prefixo para valores hexadecimais em linguagen
|
|
s de programação) foi removido:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2^128-1: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Um endereço utilizável seria:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:0db8:0100:f101:0210:a4ff:fee3:9566
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Para simplificar, os zeros iniciais de cada bloco de 16 bits pode ser omitido:
|
|
\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
|
|
Um bloco de 16 bits contendo somente zeros também pode ser omitida, sendo
|
|
representada por "::", mas não mais de uma única vez no endereço.
|
|
Caso contrário poderia haver duplicação de endereços.
|
|
\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
|
|
A maior redução possível é vista do endereço IPv6 de localhost:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
0000:0000:0000:0000:0000:0000:0000:0001 -> ::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Há também um outro representação em modo compacto (Código base 85) baseado
|
|
na
|
|
\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
|
|
|
|
(publicada em 1º Abril 1996), nunca vista em campo.
|
|
Provavelmente é uma pegadinha ou mentirinha da data.
|
|
Mas aqui está um exemplo:
|
|
\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: ipv6calc é uma calculadora de formato de endereços IPv6 que também
|
|
faz conversões, e pode ser encontrada aqui:
|
|
\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 (Básico)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Porque o nome do sucessor do IPv4 é IPv6 e não IPv5 ?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
No cabeçalho IP, os primeiros 4 bits são reservados para a versão do protocolo.
|
|
Então em teoria qualquer número entre 0 e 15 seria possível.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
4: já em uso pelo IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
5: está reservado para o 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
|
|
|
|
) (o qual nunca foi realmente feito para o público)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
O próximo número disponível era 6.
|
|
Portando, assim nasceu o IPv6!
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereços IPv6: porque um número tão grande de bits ?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Durante o desenvolvimento do IPv4, as pessoas pensaram que 32 bits seriam
|
|
suficientes para o mundo.
|
|
Olhando de volta, realmente 32 bits foram suficientes por bastante tempo.
|
|
entretanto 32 bits não foram suficientes para prover endereços globais
|
|
para todos os dispositivos de rede no futuro (ou será já no presente ?).
|
|
Pense em telefones celulares, tablets, computadores virtuais, carros, GPS's,
|
|
geladeiras, TV's, etc.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Assim, os desenvolvedores escolheram 128 bits, 4 vezes maior (no campo do
|
|
tamanho do endereço) do que o IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Mas o tamanho utilizável é menor do que parece.
|
|
Isto se deve por causa do esquema utilizado na definição do endereçamento:
|
|
64 bits são usados para identificar a interface.
|
|
Os outros 64 bits são usados para o roteamento.
|
|
Assumindo os níveis de agregação (/48, /32, ...), é possível que os endereços
|
|
também se esgotem, mas esperamos que não em futuro próximo.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para mais informações veja também
|
|
\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
|
|
|
|
e
|
|
\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
|
|
Endereços IPv6: porque um número tão pequeno de bits em um nova versão ?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Enquanto existam (possivelmente) algumas pessoas (só sei do Jim Fleming...)
|
|
na internet que estejam pensando sobre o IPv8 ou IPv16, estes projetos
|
|
estão muito longe de serem aceitos e implementados.
|
|
Enquanto isso, 128 bits foi a melhor escolha levando em consideração o
|
|
overhead do cabeçalho e o transporte de dados.
|
|
Considere o MTU mínimo no IPv4 (576 octetos) e no IPv6 (1280 octetos),
|
|
o tamanho do cabeçalho em iIPv4 é de 20 octetos (mínimo, e pode aumentar
|
|
até 60 octetos com outras opções usadas) e no IPv6 é de 40 octetos (fixo).
|
|
Isto representa 3,4% de overhead no IPv4 (com o tamanho mínimo) e 3,1 %
|
|
do menor MTU em IPv6.
|
|
O overhead é praticamente igual.
|
|
Mais bits para endereço necessitariam cabeçalhos maiores e consequentemente
|
|
mais overhead.
|
|
Além disso, considere o tamanho máximo de uma MTU em links normais (como
|
|
em Ethernet hoje): são 1500 octetos (em alguns casos especiais 9.000 octetos
|
|
usando jumbo frames).
|
|
Assim, não seria um projeto apropriado se 10% a 20% dos dados transportados
|
|
para a camada 3 fosse usado para endereçamento e não para dados propriamente
|
|
ditos.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-addresstypes"
|
|
|
|
\end_inset
|
|
|
|
Tipos de endereço
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Como no IPv4, os endereços em IPv6 também podem ser divididos em duas partes
|
|
- host e rede - com a utilização de máscaras de rede.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O IPv4 tem mostrado que algumas vezes é bom, se mais de um endereço IP puder
|
|
ser configurado em uma interface, cada um deles com um propósito bem diferente
|
|
(aliases, multicast).
|
|
Então para continuar extensível, o IPv6 também suporta esta característica
|
|
e permite que mais de 1 endereço seja configurado na mesma interface.
|
|
Atualmente não existe qualquer limitação definida pela RFC, a não ser na
|
|
implementação da pilha IPv6 (para evitar ataques DoS).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Ao usar este grande número de bits para endereço, o IPv6 define tipos de
|
|
endereços baseado nos bits iniciais, os quais são, espera-se, não sejam
|
|
quebrados no futuro, como acontece hoje com o IPv4 e as suas classes A,
|
|
B e C.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Estes números de bits são separados para endereçar redes (os primeiros 64
|
|
bits) e para endereços de host (os últimos 64 bits), para facilitar a auto-conf
|
|
iguração.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Endereços sem um prefixo especial
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereço localhost
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este é um endereço especial para a interface de loopback, similar ao 127.0.0.1
|
|
no IPv4.
|
|
Em IPv6, este endereço de localhost é:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
0000:0000:0000:0000:0000:0000:0000:0001
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ou em sua forma comprimida:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Os pacotes com este endereço como origem ou destino nunca devem sair ou
|
|
entrar em um host.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereços não especificados
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este é um endereço especial, como "any" ou "0.0.0.0".
|
|
Em IPv6 é representado assim:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
0000:0000:0000:0000:0000:0000:0000:0000
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ou:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
::
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este endereço é geralmente usado para especificação de portas (qualquer
|
|
IPv6) ou tabelas de roteamento.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: este endereço nunca pode ser usado como um endereço de destino.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereços IPv6 vinculados a endereços IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Existem dois endereços que contém endereços IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
IPv4-mapeado para IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um endereço IPv4-único para compatibilidade IPv6 é às vezes usado ou mostrado
|
|
para sockets criados por um daemon IPv6, mas que só recebe conexões de
|
|
endereços IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Estes endereços são definidos dentro de um prefixo especial, com o tamanho
|
|
/96 (a.b.c.d é o endereço IPv4):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
0:0:0:0:0:ffff:a.b.c.d/96
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
ou em seu formato comprimido
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
::ffff:a.b.c.d/96
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
por exemplo, o endereço IP 1.2.3.4 seria assim:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
::ffff:1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
por exemplo, o endereço IP 1.2.3.4 seria assim:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usado para tunelamento automático(
|
|
\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
|
|
|
|
), o qual é substituído pelo
|
|
\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
|
|
ou em seu formato comprimido
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
::a.b.c.d/96
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Parte da rede, também conhecido como prefixo
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Os designers definiram alguns tipos de endereços e deixaram muito disto
|
|
para futuras definições quando novas necessidades surgirem.
|
|
A
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4291 / IP Version 6 Addressing Architecture"
|
|
target "http://www.faqs.org/rfcs/rfc4291.html"
|
|
|
|
\end_inset
|
|
|
|
define o esquema utilizado no endereçamento atual.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Vamos agora dar uma olhada nos diferentes tipos de prefixos (e também em
|
|
tipos de endereços):
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereço tipo "link local"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Estes são endereços epeciais que são válidos somente no link de uma interface.
|
|
Usando este endereço como destino, os pacotes nunca serão encaminhados
|
|
a um router.
|
|
Isto é usado para links de comunicação, tais como:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Há alguém está aqui neste link ?
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Há alguém aqui com endereços especiais (ex.
|
|
procurando por um router) ?
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Eles começam com (onde "x" é qualquer caractere hexadecimal, normalmente
|
|
"0")
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
fe8x: <- atualmente é o único em uso
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
fe9x:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
feax:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
febx:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um endereço com este prefixo é encontrado em cada interface com IPv6 habilitado
|
|
após a auto-configuração stateless (a qual é normalmente sempre o caso).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereço tipo "site local"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Estes endereços são similares aos da
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 1918 / Address Allocation for Private Internets"
|
|
target "http://www.faqs.org/rfcs/rfc1918.html"
|
|
|
|
\end_inset
|
|
|
|
em uso atualmente em IPv4, com a vantagem adicional de que qualquer pessoa
|
|
que usar este tipo de endereço tem a capacidade de usar até 16 bits para
|
|
a definição máxima de 65535 subredes.
|
|
Comparável com o 10.0.0.0/8 do IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Outra vantagem: como é possível colocar mais de 1 endereço em uma interface
|
|
com IPv6, voce pode configurar um endereço de "site local" junto com um
|
|
endereço global.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Ele começa com:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
fecx: <- mais usado, mais comum
|
|
\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
|
|
(onde o "x" é qualquer caractere hexadecimal, geralmente um "0")
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este tipo de endereço não deveria mais ser usado,
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3879 / Deprecating Site Local Addresses"
|
|
target "http://www.faqs.org/rfcs/rfc3879.html"
|
|
|
|
\end_inset
|
|
|
|
, mas para um teste em laboratório, estes endereços ainda continuam sendo
|
|
uma boa escolha (IMHO - em minha humilde opinião).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereços locais Unicast IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Por causa da definição original de endereços de site local não serem únicos,
|
|
pode haver algum problema se duas redes já configuradas forem se conectar
|
|
em um futuro próximo (overlap de subredes).
|
|
Este e outros problemas foram os motivos para um novo tipo de endereço
|
|
definido na
|
|
\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
|
|
Ele começa com:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
fcxx:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
fdxx: <- atualmente o único em uso
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uma parte do prefixo (40 bits) é gerada usando um algoritmo pseudo-randomico
|
|
e é improvável que dois resultados gerados por este algoritmo sejam iguais.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo de um prefixo gerado por este algoritmo (veja em:
|
|
\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
|
|
Endereço tipo Global "(Aggregatable) global unicast"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Atualmente, existe um tipo de endereço definido globalmente (o primeiro
|
|
design, chamado "provider based") que foi jogado fora a alguns anos atrás
|
|
\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
|
|
|
|
, e voce consegue encontrar em algumas versões do kernel do Linux.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Ele começa com (os caracteres "x" são hexadecimais)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2xxx:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
3xxx:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: o prefixo "aggregatable" foi descartado nos atuais drafts.
|
|
Há ainda alguns outros subtipos definidos.
|
|
Veja abaixo:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Endereço de teste 6bone
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Estes foram os primeiros endereços globais que foram definidos e usados.
|
|
Eles começam com
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
3ffe:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
3ffe:ffff:100:f102::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um endereço de teste especial para o 6bone que nunca seria globalmente único
|
|
começa com
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
3ffe:ffff:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
e a maioria deles é mostrado em exemplos antigos.
|
|
A razão para isso é, se endereços reais são mostrados, seria possível alguém
|
|
copiar e colar estes endereços de arquivos de configuração antigos, o que
|
|
inadvertidamente causaria um erro de duplicação de endereço de um endereço
|
|
global único.
|
|
Isto poderia causar sérios problemas para o host original (como nunca receber
|
|
as respostas de requisições feitas).
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Como o IPv6 agora já está em produção, este prefixo não é mais delegado
|
|
e ele foi removido do processo de roteamento (veja
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 3701 / 6bone Phaseout"
|
|
target "http://www.faqs.org/rfcs/rfc3701.html"
|
|
|
|
\end_inset
|
|
|
|
para mais detalhes).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Endereços 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Estes endereços, feitos para um mecanismo de túnel especial [
|
|
\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
|
|
|
|
e
|
|
\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
|
|
|
|
],utilizam um endereço IPv4 já fornecido e a sua possível subnet, e começam
|
|
com
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2002:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Por exemplo, este endereço 192.168.1.1/5 ficaria:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2002:c0a8:0101:5::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um pequeno comando em shell poderia ajudar voce a gerar este endereço, baseado
|
|
em um endereço IPv4 fornecido:
|
|
\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
|
|
Veja também
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "tunneling using 6to4"
|
|
reference "tunneling-6to4"
|
|
|
|
\end_inset
|
|
|
|
e
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "information about 6to4 relay routers"
|
|
reference "information-joinipv6-6to4-tunneling"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Designado pelo provedor para roteamento hierárquico
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este endereço é delegado pelo ISP e começa com
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Prefixos de ISP's maiores (ou AS's) são delegados pelos
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "local registries"
|
|
reference "information-majorregionregistries"
|
|
|
|
\end_inset
|
|
|
|
e tem atualmente um tamanho de prefixo /32.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Qualquer outro ISP/empresa pode solicitar um prefixo de tamanho /48, mas
|
|
isto depende da política de distribuição de endereços dos registros locais
|
|
de cada país ou região.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Endereços reservados para exemplos e documentação
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Atualmente, dois blocos de endereço estão reservados para exemplos e documentaçã
|
|
o.
|
|
Veja a
|
|
\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
|
|
Estes endereços devem ser filtrados baseados no endereço de origem e NÃO
|
|
devem ser roteados em roteadores de borda em direção à internet, se possível.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereços Multicast
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Endereços Multicast são usados por serviços específicos.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Eles sempre começam com (xx é o valor de escopo)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
ffxy:
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Existem divisões entre escopo e tipo:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Escopo Multicast
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O escopo Multicast é um parametro usado para especificar a distancia máxima
|
|
que um pacote multicast pode "viajar" a partir de sua origem.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Atualmente, os seguintes escopos (ou regiões) estão definidos:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx1: nó local, os pacotes nunca deixam o nó.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx2: link-local, os pacotes nunca são encaminhados pelos routers, assim
|
|
eles nunca deixam o link especificado.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx5: site-local, os pacotes nunca deixam o site.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffx8: organization-local, os pacotes nunca deixam a organização (não é tão
|
|
fácil de implementar, mas deve ser coberto pelo protocolo de roteamento).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ffxe: escopo global.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
outros são reservados
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Tipos Multicast
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Já existem muitos tipos definidos/reservados (veja
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RFC 4291 / IP Version 6 Addressing Architecture"
|
|
target "http://www.faqs.org/rfcs/rfc4291.html"
|
|
|
|
\end_inset
|
|
|
|
para mais detalhes).
|
|
Alguns exemplos são:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Endereço All Nodes: ID = 1h, endereça todos os host no nó local (ff01:0:0:0:0:0:
|
|
0:1) ou no link conectado (ff02:0:0:0:0:0:0:1).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Endereço All Routers: ID = 2h, endereça tosos os routers no nó local (ff01:0:0:0
|
|
:0:0:0:2), no link conectado (ff02:0:0:0:0:0:0:2), ou no site local (ff05:0:0:0:
|
|
0:0:0:2)
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Endereço multicast solicitado nó link-local
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um endereço de multicast especial que é usado como endereço de destino para
|
|
a descoberta da vizinhança , uma vez que no IPv6 não há ARP, como existe
|
|
no IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um exemplo deste endereço se parece com
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
ff02::1:ff00:1234
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Os prefixos usados mostram que este é um endereço multicast link-local.
|
|
O sufixo é gerado a partir do endereço de destino.
|
|
Neste exemplo, um pacote deveria ser enviado ao endereço "fe80::1234",
|
|
mas a parte de rede não conhece o MAC atual deste destino.
|
|
Ele então substitui os 104 bits mais altos com "ff02:0:0:0:0:1:ff00::/104"
|
|
e deixa os menores 24 bits intocados.
|
|
Este endereço então é agora usado no link para achar o nó correspondente
|
|
que tem que enviar uma resposta contendo o endereço MAC usado na camada
|
|
2.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Endereços Anycast
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Endereços Anycast são endereços especiais e eles são usados para muitas
|
|
coisas, como o servidor DNS ou DHCP mais próximo, e outras coisas.
|
|
Estes endereços são obtidos do espaço de endereçamento Unicast (aggregatable
|
|
global ou site-local).
|
|
O mecanismo anycast (do ponto de vista do cliente) será tratado pelos protocolo
|
|
s de roteamento dinamico.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: Endereços anycast não podem ser usados como endereços de origem, pois
|
|
eles se aplicam somente a endereços de destino.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Endereços Anycast Subnet-router
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um exemplo simples para um endereço unicast é o anycast subnet-router.
|
|
Assumindo que um nó tem os seguintes endereços globais IPv6 configurados:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:db8:100:f101:210:a4ff:fee3:9566/64 <- Node's address
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O endereço unicast subnet-router será criado removendo o sufixo (os 64 bits
|
|
menos significantes) completamente:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:db8:100:f101::/64 <- subnet-router anycast address
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Tipos de endereço (parte de host)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Para a auto-configuração e questões de mobilidade, foi decidido usar os
|
|
64 bits de menor significado como a parte de host do endereço na maioria
|
|
dos tipos de endereços atuais.
|
|
Desta forma, cada subnet pode suportar uma grande quantidade de endereços.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
A parte de host pode ser verificada de maneira distinta:
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Computado automaticamente (também conhecido como stateless)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Com a auto-configuração, a parte host do endereço é feita através da conversão
|
|
do endereço MAC da interface (se disponível), através do método EUI-64,
|
|
para um único endereço IPv6.
|
|
Se nenhum MAC estiver disponível para este dispositivo (isto acontece bastante
|
|
em dispositivos virtuais), outra coisa (como o endereço IPv4 ou o MAC da
|
|
interface física) é usada no lugar.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo: uma placa de rede tem o seguinte endereço MAC (48 bit):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
00:10:a4:01:23:45
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Isto poderia ser expandido de acordo com o tutorial do IEEE -
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IEEE-Tutorial EUI-64"
|
|
target "http://standards.ieee.org/regauth/oui/tutorials/EUI64.html"
|
|
|
|
\end_inset
|
|
|
|
resultando no endereço abaixo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
0210:a4ff:fe01:2345
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Com um prefixo já fornecido, o resultado é o endereço IPv6 mostrado abaixo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:0db8:0100:f101:0210:a4ff:fe01:2345
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Problema de privacidade com os endereços automaticamente computados e uma
|
|
solução
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Por causa da parte host do endereço "automaticamente computado" ser único,
|
|
(exceto quando um fabricante de placas de rede usa o mesmo MAC em mais
|
|
de um NIC), o rastreamento de um cliente é possível quando não há um proxy
|
|
de qualquer tipo.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Este é um problema já conhecido, e a sua solução foi definida através da
|
|
extensão de privacidade, definida na
|
|
\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
|
|
|
|
(já existe também um novo draft disponível:
|
|
\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
|
|
|
|
).
|
|
Usando um valor estático e um valor randomico, um novo sufixo é gerado
|
|
de tempos em tempos.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Nota: isto é somente interessante em conexões finais de clientes, e não
|
|
é realmente útil para servidores já conhecidos.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Definido manualmente
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para servidores, provavelmente é mais fácil se lembrar de endereços mais
|
|
simples, mas isto também pode ser resolvido.
|
|
Em IPv6, é possível configurar um endereço adicional para uma interface.
|
|
Veja o exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:0db8:100:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para sufixos manuais como o ::1 mostrado acima, é necessário que o sétimo
|
|
bit mais significativo seja definido como 0 (o bit universal/local do identific
|
|
ador gerado automaticamente).
|
|
Existe também uma outra combinação de bits (não utilizada) que é reservada
|
|
para endereços unicast.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Tamanho de prefixos para roteamento
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Na fase inicial de projeto e design do IPv6, foi planejada a utilização
|
|
hierárquica de roteamento para reduzir o tamanho das tabelas de roteamento
|
|
ao menor valor possível.
|
|
As razões por trás desta abordagem foram o grande número de rotas nos grandes
|
|
roteadores de borda (cerca de 300.000 em janeiro de 2011), reduzindo a necessida
|
|
de de memória nos routers e a capacidade de se utilizar chips ASIC (Application
|
|
Specified Integrated Circuit) para manipular esta tabela, aumentando a
|
|
velocidade (uma tabela menor aumenta a velocidade).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
A visão de hoje é que o roteamento será mais hierárquico para redes com
|
|
somente 1 ISP.
|
|
Em redes com mais de 1 conexão, isto não é possível, e está sujeita a sistemas
|
|
multi-homed (informações de 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
|
|
Tamanho de prefixo (também conhecido como "netmasks")
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Semelhante ao IPv4, a rede roteável entra em cena.
|
|
Por causa da notação do padrão de máscara de rede (128 bits) não parecer
|
|
bom, os designers utilizaram o mesmo método utilizado no IPv4, chamado
|
|
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
|
|
|
|
)o qual especifica o número de bits do endereço IP que será usado para o
|
|
roteamento.
|
|
E ele também é chamado notação "slash".
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:0db8:100:1:2:3:4:5/48
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Esta notação pode ser expandida:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Rede:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2001:0db8:0100:0000:0000:0000:0000:0000
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Máscara de rede:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
ffff:ffff:ffff:0000:0000:0000:0000:0000
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Encontrando uma rota
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em circunstancias normais, (sem QoS), a procura em uma tabela de roteamento
|
|
resulta na rota mais adequada com o número mais significante de bits do
|
|
endereço.
|
|
Em outras palavras, a rota com o maior prefixo tem a preferencia.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Por exemplo, se uma tabela de rotas mostra as seguintes entradas (a lista
|
|
é parcial):
|
|
\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
|
|
Os endereços de destino mostrados dos pacotes IPv6 serão roteados através
|
|
das interfaces mostradas
|
|
\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
|
|
|
|
Verificação do sistema para IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Antes de voce começar a utilizar o IPv6 em uma máquina com Linux, é necessário
|
|
testar para saber se seu sistema tem o suporte ao protocolo.
|
|
Talvez voce tenha que fazer algum ajuste para prepara-lo antes de começar
|
|
a usar.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "systemcheck-kernel"
|
|
|
|
\end_inset
|
|
|
|
Kernel com IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
As distribuições mais novas de Linux já tem o kernel com suporte ao IPv6,
|
|
e este suporte geralmente acontece com a compilação em módulos, mas é possível
|
|
que estes módulos sejam carregados no momento do boot.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
|
|
\series bold
|
|
Nota: voce não deve usar o kernel da série 2.2, porque ele já não é mais
|
|
atualizado.
|
|
A série 2.4 também já não tem todas as atualizações de acordo com as últimas
|
|
RFC's, então recomendamos utilizar um kernel da série 2.6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Verificação do suporte a IPv6 no kernel utilizado
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Para verificar se o seu kernel já está com o suporte a IPv6 habilitado,
|
|
de uma olhada nos arquivos do diretório /proc.
|
|
A seguinte entrada deve existir:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
/proc/net/if_inet6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Para quem gosta de scripts, é possível usar estes comandos:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Se este teste falhar, provavelmente seu sistema não está com os módulos
|
|
de IPv6 carregados.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Tentando carregar os módulos para o IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Voce pode tentar carregar os módulos do IPv6 com o comando
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# modprobe ipv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Se a carga ocorreu sem problemas, verifique o status com estes comandos:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# lsmod |grep -w 'ipv6' && echo "IPv6 module successfully loaded"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Depois disso, rode os comandos novamente do item 4.1.1 para ter certeza de
|
|
que está tudo certo.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Note: a remoção do módulo (rmmod) não é suportada, e recomendo não utilizar,
|
|
pois pode haver alguma instabilidade no sistema.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Carga automática do módulo
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
É possível automatizar a carga do módulo IPv6 conforme seja necessário.
|
|
Para isto, basta adicionar a seguinte entrada no arquivo de configuração
|
|
(/etc/modules.conf ou /etc/conf.modules):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
alias net-pf-10 ipv6 # automatically load IPv6 module on demand
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Também é possível desabilitar a carga do módulo automaticamente usando a
|
|
seguinte entrada:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
alias net-pf-10 off # disable automatically load of IPv6 module on demand
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: no kernel da série 2.6, o mecanismo carregador de módulos mudou, e
|
|
o novo arquivo de configuração é o /etc/modprobe.conf.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Compilando o kernel 2.6 para suportar o IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Se os dois resultados acima foram negativos, e o seu kernel não tem suporte
|
|
para o IPv6, então voce tem algumas coisas a fazer:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Atualizar a sua distribuição para uma que suporte o IPv6 (recomendado para
|
|
os novatos)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Compilar um novo kernel (fácil, se voce souber quais opções são necessárias)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Recompilar os fontes do kernel dado pela sua distribuição (nem sempre tão
|
|
fácil)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Compilar um kernel com as extensões USAGI
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Se voce decidir compilar um kernel, voce precisa ter alguma experiencia
|
|
nisso e também ler o
|
|
\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
|
|
Uma comparação entre o kernel vanilla e as extensões USAGI está disponível
|
|
aqui
|
|
\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
|
|
Compilando um kernel vanilla
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Mais detalhes e dicas sobre a compilação de um kernel com suporte a IPv6
|
|
pode ser encontrado em
|
|
\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
|
|
Nota: voce deve usar, sempre que possível, um kernel da séria 2.6, uma vez
|
|
que o suporte ao IPv6 na série 2.4 já não teve as últimas atualizações definidas
|
|
nas RFC's, e a série 2.2 não tem mais o suporte atualizado ou mesmo mantido
|
|
por alguém.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Compilando um kernel com as extensões USAGI
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Para a família vanilla de kernel, recomendado somente para usuários avançados,
|
|
os quais já estão familiarizados com o IPv6 e com compilação de kernel.
|
|
Veja também
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "USAGI project / FAQ"
|
|
target "http://www.linux-ipv6.org/faq.html"
|
|
|
|
\end_inset
|
|
|
|
e
|
|
\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
|
|
Dispositivos de rede com suporte a IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nem todos os dispositivos de rede tem suporte (ou terão) para transportar
|
|
pacotes IPv6.
|
|
Um status atualizado pode ser encontrado em
|
|
\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
|
|
O maior problema disso é causado na implementação da camada de rede, já
|
|
que o pacote IPv6 não é reconhecido pelo cabeçalho IP (6 ao invés de 4).
|
|
Ele é reconhecido pelo protocolo da camada 2 (transporte).
|
|
Da mesma maneira, qualquer protocolo da camada 2 que não usa numeração
|
|
de protocolo não conseguirá encaminhar os pacotes IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: mesmo assim o pacote ainda é transportado pelo link, mas no lado receptor,
|
|
o encaminhamento não ocorrerá (voce pode verificar isso com a utilização
|
|
do tcpdump).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Estes links nunca suportarão IPv6
|
|
\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
|
|
|
|
), deveria ser chamado de SLIPv4, nome do dispositivo: slX
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Parallel Line IP (PLIP), que nem o SLIP, nome do dispositivo: plipX
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ISDN com encapsulamento rawip, nome do dispositivo: isdnX
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Este link atualmente não suporta IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ISDN com encapsulamento syncppp, nome do dispositivo: ipppX (problema de
|
|
projeto do ipppd, que deveria ter sido resolvido com um PPP mais generalista
|
|
na série de kernel 2.5)
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Ferramentas de configuração de rede que suportam IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Voce não irá muito longe, se voce estiver rodando um kernel com suporte
|
|
a IPv6, mas não tiver ferramentas que o ajudem a configurar o IPv6.
|
|
Existem vários pacotes para ajudá-lo neste trabalho.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Pacote net-tools
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
O pacote net-tools inclui algumas ferramentas como ifconfig e route, que
|
|
ajudam a configurar uma interface em IPv6.
|
|
Veja a saída dos comandos ifconfig -? ou route -?, se eles mostrarem algo
|
|
parecido com IPv6 ou inet6, então a ferramenta tem suporte a IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Novamente, para quem gosta de scripts:
|
|
\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
|
|
Verificando o route:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -? 2>& 1|grep -qw 'inet6' && echo "utility 'route' is IPv6-ready"
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Pacote iproute
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Alexey N.
|
|
Kuznetsov (atual mantenedor do código de rede no Linux) criou um grupo
|
|
de ferramentas que configuram redes através do dispositivo netlink.
|
|
O uso destas ferramentas dá mais funcionalidades do que as do pacote net-tools,
|
|
mas elas não estão muito bem documentadas e não são para os fracos de coração.
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip 2>&1 |grep -qw 'inet6' && echo "utility 'ip' is IPv6-ready"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Se o programa /sbin/ip não for encontrado em seu sistema, então eu recomendo
|
|
que voce instale o pacote iproute.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Voce pode pega-lo através de sua distribuição (se houver)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Voce pode procurar o pacote RPM em
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "RPMfind/iproute"
|
|
target "http://rpmfind.net/linux/rpm2html/search.php?query=iproute"
|
|
|
|
\end_inset
|
|
|
|
(em alguns casos é recomendada a reconstrução do SRPMS)
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Programas de teste e debug IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Após a preparação do seu sistema para o IPv6, está na hora de usar este
|
|
protocolo para a sua comunicação com outros sistemas.
|
|
Primeiro voce deve aprender como analisar os pacotes através de um sniffer.
|
|
Isto é altamente recomendável para que qualquer debug ou troubleshooting
|
|
seja feito de maneira rápida.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "program-ping6"
|
|
|
|
\end_inset
|
|
|
|
Ping IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este programa está incluído no pacote iputils.
|
|
Seu objetivo é enviar e testar o transporte de pacotes ICMPv6 echo-request
|
|
packets e aguardar pelos pacotes ICMPv6 echo-reply.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso
|
|
\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
|
|
Exemplo
|
|
\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
|
|
Dica: o comando ping6 precisa de acesso direto ao socket e por isso precisa
|
|
de permissão de root.
|
|
Então se usuários comuns (não-root) tentarem usar o ping6 e não obtiverem
|
|
sucesso, podem ser um dos dois problemas:
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
ping6 não está na variável PATH deste usuário (provavelmente porque o ping6
|
|
é geralmente localizado em /usr/sbin, e adicionar este diretório ao path
|
|
do usuário comum não é muito recomendado)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
ping6 não executa corretamente, geralmente porque faltam permissões de root.
|
|
A sugestão neste caso é executar o comando chmod u+s /usr/sbin/ping6 para
|
|
permitir o uso do programa.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Especificando a interface para o ping em IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Ao usar um endereço link-local para pingar alguém em IPv6 o kernel pode
|
|
não reconhecer ou saber através de qual interface (física ou virtual) o
|
|
pacote deve ser enviado.
|
|
Por causa disso, a seguinte mensagem de erro deve aparecer:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# ping6 fe80::212:34ff:fe12:3456
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
connect: Invalid argument
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Neste caso, voce precisa especificar qual interface deve ser usada para
|
|
enviar o pacote, como mostrado abaixo:
|
|
\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 para endereços multicast
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um mecanismo interessante para detectar hosts com endereço IPv6 é pingar
|
|
o endereço all-node multicast:
|
|
\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
|
|
Diferente do IPv4, onde as respostas ao ping para endereços de broadcast
|
|
podem ser desabilitadas, em IPv6 este comportamento não pode ser desabilitado,
|
|
exceto pela utilização de um firewall IPv6 local.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "program-traceroute6"
|
|
|
|
\end_inset
|
|
|
|
Traceroute6 IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este programa geralmente está incluso no pacote iputils.
|
|
É um programa conhecido, similar ao do IPv4.
|
|
Veja o exemplo:
|
|
\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
|
|
Nota: diferente das versões mais atuais co traceroute do IPv4, que usa pacotes
|
|
ICMPv4 echo-request e pacotes UDP (default), o traceroute do IPv6 só é
|
|
capaz de enviar pacotes UDP.
|
|
Como voce já deve saber, pacotes ICMP echo-request são mais aceitos pelos
|
|
firewalls e listas de acesso (ACL) de routers do que pacotes UDP.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "program-tracepath6"
|
|
|
|
\end_inset
|
|
|
|
Tracepath6 IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este programa costuma estar incluído no pacote iputils.
|
|
É um programa similar ao traceroute6 e ele traça o caminho para um endereço
|
|
dado, descobrindo o MTU ao longo deste caminho.
|
|
Veja o exemplo abaixo:
|
|
\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
|
|
|
|
Tcpdump IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
No Linux, o tcpdump é a maior ferramenta para a captura de pacotes.
|
|
Abaixo estão alguns exemplos.
|
|
O suporte ao IPv6 já está adicionado nas versões 3.6 ou superiores deste
|
|
programa.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O tcpdump usa diversas expressões e argumentos para realizar a filtragem
|
|
de pacotes para minimizar o volume de informações apresentado:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
icmp6: filtra o tráfego ICMPv6 nativo
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
ip6: filtra o tráfego nativo IPv6 (incluindo ICMPv6)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
proto ipv6: filtra o tráfego IPv6 tunelado em IPv4 (IPv6-in-IPv4)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
not port ssh: para evitar mostrar os pacotes se voce estiver usando uma
|
|
conexão SSH
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Além disso, algumas opções são muito úteis para obter mais informações de
|
|
cada pacote, bem interessantes para pacotes ICMPv6:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
"-s 512": aumenta o tamanho do pacote capturado para 512 bytes.
|
|
Se for usada a opção "-s 0" o pacote é capturado por inteiro
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
"-s 512": aumenta o tamanho do pacote capturado para 512 bytes.
|
|
Se for usada a opção "-s 0" o pacote é capturado por inteiro
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
"-n": não resolve os endereços para nomes, muito útil quando o DNS reverso
|
|
não está funcionando corretamente
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Ping IPv6 para 2001:0db8:100:f101::1 nativo sobre um link local
|
|
\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
|
|
Ping IPv6 para 2001:0db8:100::1 roteado através de um túnel IPv6-in-IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Os endereços IPv4 1.2.3.4 e 5.6.7.8 são os tunnel endpoints (todos os endereços
|
|
são exemplos)
|
|
\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
|
|
Programas com suporte a IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As distribuições Linux atuais já contém a maioria dos serviços Cliente e
|
|
Servidor em IPv6.
|
|
Veja aqui em
|
|
\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
|
|
|
|
.
|
|
Se ainda não estiver incluído, voce pode verificar em
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - Current Status - Applications"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-apps.html"
|
|
|
|
\end_inset
|
|
|
|
se o programa já está portado para o IPv6 e pronto para o Linux.
|
|
Para os programas mais comuns existem dicas disponíveis em
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo - Part 3"
|
|
target "http://www.bieringer.de/linux/IPv6/IPv6-HOWTO/IPv6-HOWTO-3.html"
|
|
|
|
\end_inset
|
|
|
|
e
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6 & Linux - HowTo - Part 4"
|
|
target "http://www.bieringer.de/linux/IPv6/IPv6-HOWTO/IPv6-HOWTO-4.html"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Programas cliente com suporte a IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para executar os testes abaixo, é necessário que seu sistema seja um host
|
|
IPv6 e os exemplos mostrados podem ser feitos se voce tiver acesso ao 6bone.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Verificando a resolução DNS para endereços IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Por causa dos updates de segurança aplicados nos últimos anos, o Servidor
|
|
DNS que roda a versão mais atual já tem a capacidade de entender os endereços
|
|
IPv6 tipo AAAA (o named A6 mais novo ainda não é usado porque só no BIND9
|
|
o suporte aos root domais ARPA IP6 está em uso).
|
|
Um teste bem simples para ver o sistema resolver endereços IPv6 é:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# host -t AAAA www.join.uni-muenster.de
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
e a resposta deve ser alguma coisa parecida com isso:
|
|
\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
|
|
Cliente de Telnet com suporte a IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Cliente de telnet com suporte a IPv6 estão disponíveis.
|
|
Um teste simples pode ser feito com o comando:
|
|
\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
|
|
Se o cliente de telnet não entende o IPv6, a mensagem de erro será "cannot
|
|
resolve hostname".
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
SSH com suporte a IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
openssh
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As versões atuais do openssh já suportam IPv6.
|
|
Dependendo da configuração utilizada, ele tem dois comportamentos:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
--without-ipv4-default: o cliente tenta se conectar primeiro em IPv6, e
|
|
ele usa IPv4 se a conexão em IPv6 não for estabelecida
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
--with-ipv4-default: a conexão é feita primeiro em IPv4 e para usar algum
|
|
endereço IPv6, deve-se forçar a sua utilização.
|
|
Veja o exemplo
|
|
\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
|
|
Se seu cliente ssh não entende a opção "-6" então o suporte a IPv6 não está
|
|
habilitado, como muitos pacotes de ssh na versão 1.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ssh.com
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O software cliente e servidor SSH da SSH.com já suporta o IPv6 e agora ele
|
|
é grátis para todos os Linux e FreeBSD, independente se o seu uso é pessoal
|
|
ou comercial.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Browsers com suporte a IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O status atual dos browsers com suporte a IPv6 pode ser encontrado aqui
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "IPv6+Linux-status-apps.html#HTTP"
|
|
target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-apps.html#HTTP"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A maioria deles ainda tem problemas pendentes, tais como:
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Se a configuração de proxy usa somente endereços IPv4, os pedidos em IPv6
|
|
também serão enviados a este proxy, emas como o proxy não saberá resolver
|
|
o endereço, o pedido não vai funcionar.
|
|
A única solução é verificar se o seu software de proxy tem alguma atualização
|
|
para resolver este problema.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Configuração automática de proxy (*.pac) não pode ser utilizada para manipular
|
|
pedidos em IPv6 de maneira diferenciada (exemplo: não usar o proxy para
|
|
o IPv6) por causa da sua natureza (escritos em Javascript e muito encrustado
|
|
no código fonte, como é visto no Mozilla).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As versões anteriores de browsers também não entenderiam uma URL com o endereço
|
|
IPv6, como no exemplo
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://[2001:4dd0:f838:a006::6]/"
|
|
target "http://[2001:4dd0:f838:a006::6]/"
|
|
|
|
\end_inset
|
|
|
|
(isto funciona somente se a URL for usada em um browser que suporte IPv6).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um pequeno teste é tentar este endereço em um browser sem o proxy configurado.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
URLs para teste
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um bom ponto de partida para browsers que usam IPv6 é o site
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "http://www.kame.net/"
|
|
target "http://www.kame.net/"
|
|
|
|
\end_inset
|
|
|
|
.Se a tartaruga da página estiver animada, a sua conexão é em IPv6.
|
|
caso contrário, a tartaruga ficará parada.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Programas servidores com suporte a IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nesta parte deste HowTo, outros softwares cliente IPv6 são mencionados,
|
|
assim como dicas para servidores com suporte a IPv6, como sshd, httpd,
|
|
telnetd, etc, assim como outras dicas em
|
|
\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 (checagem de sistema com suporte a IPv6)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando ferramentas
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Q: Não consigo pingar (ping6) o endereço link-local
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Mensagem de erro: "connect: Invalid argument"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O kernel não conhece qual interface física ou virtual voce quer utilizar
|
|
para enviar o pacote ICMPv6.
|
|
Assim, a solução poderia aparecer assim.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Solução:: Determine a interface, como: "ping6 -I eth0 fe80::2e0:18ff:fe90:9205",
|
|
veja também
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "program ping6 usage"
|
|
reference "program-ping6"
|
|
|
|
\end_inset
|
|
|
|
.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Q: Não consigo pingar (ping6) ou efetuar traceroute (traceroute6) como usuário
|
|
normal
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Menagem de erro: "icmp socket: Operation not permitted"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Estes utilitários criam pacotes especiais ICMPv6 e então os enviam.
|
|
Isto é feito usando conexões brutas no kernel.
|
|
Mas estas conexões somente podem ser usadas pelo usuário "root".
|
|
Desta forma, esta mensagem vai aparecer para os usuários normais.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Solução: Se for realmente necessário que todos os usuários utilizem estas
|
|
ferramentas, voce pode adicionar o "suid" bit usando o comando "chmod u+s
|
|
/caminho/para/o/programa", e veja também este link
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "program ping6 usage"
|
|
reference "program-ping6"
|
|
|
|
\end_inset
|
|
|
|
Se nem todos os usuários necessitam usá-lo, voce pode mudar o grupo do programa,
|
|
para "wheel" por exemplo, e todos os usuários pertencentes a este grupo
|
|
poderão executar estes programas sem problema.
|
|
Voce também pode configurar o "sudo" para isto também.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-configuration-interface"
|
|
|
|
\end_inset
|
|
|
|
Configurando interfaces
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Dispositivos de rede diferentes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em um nó, podem haver diferentes tipos de interfaces.
|
|
Elas podem estar agrupadas em classes
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Físicas, como eth0, tr0
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Virtuais, como ppp0, tun0, tap0, sit0, isdn0, ippp0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Físicas
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As interfaces físicas, como Ethernet ou Token Ring são exemplos de interfaces
|
|
comuns que não precisam de qualquer tipo de tratamento especial.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Virtuais
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As interfaces virtuais sempre precisam de algum tratamento especial
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Interfaces Túnel IPv6-in-IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Estas interfaces normalmente recebem o nome
|
|
\series bold
|
|
sit
|
|
\emph on
|
|
x
|
|
\series default
|
|
\emph default
|
|
.
|
|
O nome sit é uma atalho para
|
|
\series bold
|
|
S
|
|
\series default
|
|
imple
|
|
\series bold
|
|
I
|
|
\series default
|
|
nternet
|
|
\series bold
|
|
T
|
|
\series default
|
|
ransition.
|
|
Esta interface tem a capacidade de encapsular os pacotes IPv6 em pacotes
|
|
IPv4 e tunelar estes pacotes para um endpoint remoto.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A interface
|
|
\series bold
|
|
sit0
|
|
\series default
|
|
tem um papel especial e não pode ser usada para túneis dedicados.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Interfaces PPP
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
As interfaces PPP obteem sua capacidade IPv6 do daemon PPP para IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Interfaces ISDN HDLC
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A capacidade IPv6 para HDLC com encapsulamento IP já está contida no kernel
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Interfaces ISDN PPP
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A interface ISDN PPP (ippp) não tem o suporte ao IPv6 no kernel.
|
|
E também não há qualquer plano para suportar, porque o kernel da série
|
|
2.5 ele será substituído por uma camada de interface PPP mais genérica.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
SLIP + PLIP
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Como mencionado anteriormente neste documento, esta interface não suporta
|
|
o IPv6 (no envio até que funciona, mas a recepção não funciona).
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Dispositivo Ether-tap
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Dispositivos Ether-tap já possuem o IPv6 habilitado e o stateless configurado.
|
|
Para usá-lo, o módulo "ethertap" deve ter sido carregado antes.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Dispositivos tun
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Atualmente não foi testado por mim
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ATM
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
01/2002: Não são mais suportados pelo kernel vanilla, mas somente pelas
|
|
extensões USAGI
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Outras
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Eu esqueci de alguma ?
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Colocando as interfaces em up e down
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Existem dois métodos usados para colocar as interfaces em up ou down..
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\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
|
|
Exemplo:
|
|
\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
|
|
Usando "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig <interface> up
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig <interface> down
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\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
|
|
|
|
Configurando endereços IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Existem várias maneiras de configurar um endereço IPv6 em uma interface.
|
|
As mais comuns são "ifconfig" e "ip".
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Mostrando os endereços IPv6 existentes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Antes de mais nada, voce precisa checar se já existe algum endereço IPv6
|
|
configurado e qual é o seu tipo (talvez atribuído durante uma auto-configuração
|
|
stateless).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 addr show dev <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo para uma configuração de host estático:
|
|
\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
|
|
Exemplo de um host auto-configurado
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aqui voce pode ver a configuração de IPv6 através do processo auto-magically,
|
|
além do tempo de vida do endereço.
|
|
\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
|
|
Usando "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo (a saída foi filtrada com o grep para mostrar somente os endereços
|
|
IPv6).
|
|
Aqui voce pode ver diferentes endereços IPv6 com diferentes escopos.
|
|
\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
|
|
Adicionando um endereço IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A adição de um endereço IPv6 é muito similar ao endereço "IP ALIAS" nas
|
|
interfaces IPv4 no Linux.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 addr add <ipv6address>/<prefixlength> dev <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 addr add 2001:0db8:0:f101::1/64 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig <interface> inet6 add <ipv6address>/<prefixlength>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Removendo um endereço IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Como esta ação não é tão necessária, tenha cuidado ao remover endereços
|
|
IPv6 que não existem, pois ao realizar esta ação em kernels mais antigos,
|
|
voce pode causar um grande estrago no sistema.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 addr del <ipv6address>/<prefixlength> dev <interface>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 addr del 2001:0db8:0:f101::1/64 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ifconfig"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig <interface> inet6 del <ipv6address>/<prefixlength>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\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
|
|
|
|
Configurando rotas IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Se voce quer deixar seu link e quer enviar pacotes a todo o mundo que está
|
|
só aguardando a sua conexão em IPv6, voce vai precisar de uma rota.
|
|
Se já houver um router com IPv6 habilitado (e uma rota para ele), estes
|
|
passos abaixo vão te ensinar como adicionar mais rotas em IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Mostrando as rotas IPv6 existentes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Antes de mais nada, é interessante verificar quais são as rotas IPv6 já
|
|
configuradas (talvez atribuído durante uma auto-configuração).
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route show [dev <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Exemplo:
|
|
\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
|
|
Usando "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Exemplo (a saída foi filtrada para a interface eth0).
|
|
Aqui voce pode ver rotas IPv6 para diferentes endereços em uma única 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
|
|
Adicionando uma rota IPv6 através de um gateway
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Bastante necessário quando se quer acessar outras redes com IPv6 usando
|
|
um router IPv6-enabled em seu link.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\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
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route add 2000::/3 via 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\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
|
|
Um dispositivo pode ser necessário se o dispositivo do endereço IPv6 do
|
|
gateway for um dispositivo link local.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Veja o exemplo abaixo, como adicionar uma rota para todos os endereços globais
|
|
(2000::/3) através do gateway
|
|
\family typewriter
|
|
\lang afrikaans
|
|
2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 add 2000::/3 gw 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Removendo uma rota IPv6 através de um gateway
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Não é geralmente usada no modo manual, pois sugerimos a utilização de scripts
|
|
ou shutdown nas interfaces (todas ou por interface)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\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
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route del 2000::/3 via 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\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
|
|
Exemplo para remover a rota adicionada anteriormente (acima):
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 del 2000::/3 gw 2001:0db8:0:f101::1
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Adicionando uma rota IPv6 através de uma interface
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Nem sempre usado, mas quando usado é em links ponto a ponto.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\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
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route add 2000::/3 dev eth0 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A métrica "1" é usada aqui para se manter compatível com as métricas usadas
|
|
pelo comando route, já que a métrica default ao se usar "ip" é "1024".
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 add <ipv6network>/<prefixlength> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 add 2000::/3 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Removendo uma rota IPv6 através de uma interface
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Nem sempre utilizado manualmente, pois recomenda-se a utilização de scripts.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route del <ipv6network>/<prefixlength> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route del 2000::/3 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 del <network>/<prefixlength> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Exemplo:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 del 2000::/3 dev eth0
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
FAQ para rotas em IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Suporte de uma rota default IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uma boa idéia do IPv6 foi o roteamento hierárquico, o que proporcionaria
|
|
a necessidade de menos rotas nos roteadores.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aqui estão alguns problemas no kernel atual do Linux:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Clientes (não roteando qualquer pacote!)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um cliente pode configurar uma rota default prefixo "::/0", mas eles também
|
|
aprendem uma rota no processo de auto configuração, ex.: uso do radvd no
|
|
link abaixo mostra:
|
|
\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
|
|
Roteadores em caso de packet forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Os linux mais velhos (pelo menos inferiores ao kernel 2.4.17) não suportam
|
|
rotas default.
|
|
Voce pode configura-las, mas a pesquisa na tabela vai retornar uma falha
|
|
quando deveria ser encaminhado (intenção normal do roteador).
|
|
Se voce ainda está usando uma versão antiga de kernel, as "rotas default"
|
|
podem ser configuradas usando o prefixo de endereço global "2000::/3".
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: tome cuidado com as rotas default sem filtragem de endereços em roteadores
|
|
de borda, pois o tráfego multicast ou site-local pode sair para o mundo.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-Neighbor-Discovery"
|
|
|
|
\end_inset
|
|
|
|
Descoberta de vizinhos
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A descoberta de vizinhos funciona como um sucessor do ARP (Address Resolution
|
|
Protocol) em IPv4, no mundo IPv6.
|
|
Voce pode obter estas informações sobre os vizinhos atuais, e adicionalmente
|
|
voce pode configurar e excluir entradas.
|
|
O kernel mantém o rastreamento das descobertas bem sucedidas (como no ARP
|
|
em IPv4).
|
|
Voce pode pesquisar as entradas nesta tabela usando o comando "ip".
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Mostrando os vizinhos usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Com o comando abaixo voce pode verificar a tabela de vizinhos aprendida
|
|
ou configurada
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# ip -6 neigh show [dev <device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O exemplo a seguir mostra um vizinho, o qual é um router acessível
|
|
\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
|
|
Manipulando a tabela de vizinhos usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Adicionando uma entrada manualmente
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Com o comando abaixo, voce consegue adicionar uma entrada manualmente
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# ip -6 neigh add <IPv6 address> lladdr <link-layer address> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\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
|
|
Excluindo uma entrada manualmente
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Similar à adição de uma entrada, uma entrada pode ser excluída
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# ip -6 neigh del <IPv6 address> lladdr <link-layer address> dev <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\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
|
|
Opções mais avançadas
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A ferramenta "ip" não é tão documentada, mas é bem útil e forte.
|
|
Veja o seu help online para mais informações:
|
|
\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
|
|
Aparentemente algumas opções são somente para o IPv4...
|
|
e se voce quiser contribuir com mais informações sobre outras opções da
|
|
ferramenta e usos avançados, por favor, me envie.
|
|
\end_layout
|
|
|
|
\begin_layout Chapter
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "chapter-configuring-ipv6-in-ipv4-tunnels"
|
|
|
|
\end_inset
|
|
|
|
Configurando um túnel IPv6-in-IPv4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Se voce quer deixar seu link e ter uma rede IPv6 à sua volta, voce vai precisar
|
|
de um túnel IPv6-in-IPv4 para acessar a web em modo IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Existem alguns tipos de mecanismo e também algumas possibilidades da configuraçã
|
|
o deste túnel.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Tipos de túneis
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Existe mais de uma possibilidade de transportar pacotes IPvb6 em links IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Túnel estático ponto a ponto: 6bone
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Um túnel ponto a ponto é um túnel dedicado em direção a um ponto final.,
|
|
o qual sabe informações sobre uma rede IPv6A (para rotas de volta) e os
|
|
endereços IPv4 deste túnel estão definidos na
|
|
\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
|
|
|
|
.
|
|
Necessidades:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
O endereço IPv4 local do túnel precisa ser estático, global, único e acessível
|
|
a partir da outra ponta
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Um prefixo global IPv6 deve ser designado a voce (veja o registro 6bone)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\align left
|
|
Um ponto final remoto do túnel deve ser capaz de rotear seu prefixo IPv6para
|
|
seu ponto final local (uma configuração manual pode ser necessária)
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Túnel automático
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um túnel automático acontece quando um nó diretamente conectado a outro
|
|
nó obtém um IPv4 do outro nó anterior.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "tunneling-6to4"
|
|
|
|
\end_inset
|
|
|
|
6to4-Tunneling
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O túnel 6to4 (
|
|
\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
|
|
|
|
) utiliza um mecanismo simples para criar túneis automáticos.
|
|
Cada nó com um endereço global único é capaz de ser uma ponta final de
|
|
um túnel 6to4 (se nenhum firewall no meio do caminho bloquear este tipo
|
|
de tráfego).
|
|
Túneis 6to4 não costumam ser túneis um a um.
|
|
Este tipo de túnel pode ser dividido em Upstream e Downstream.
|
|
Além disso, um endereço especial IPv6 indica que este nó vai usar o tunelamento
|
|
6to4 para se conectar a redes IPv6 mundiais.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Geração de prefixo 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O endereço 6to4 está definido abaixo (o esquema foi pego da
|
|
\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 e TLA juntos (16 bits) tem o valor 0x2002.
|
|
V4ADDR é o endereço único IPv4 (em notação hexadecimal).
|
|
SLA é o identificador de rede (65536 redes locais possíveis) e são usados
|
|
para representar a sua estrutura de rede local.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para os gateways, tal prefixo é gerado normalmente usando o SLA
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
0000
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
e o sufixo "::1" (não é uma exigencia, pode ser arbitrário com um escopo
|
|
local) e então assinalado a uma interface de túnel 6to4.
|
|
Veja que a Microsoft também utiliza V4ADDR para o sufixo.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Tunelamento Upstream 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O nó tem que saber para qual ponta remota de túnel os pacotes IPv4 com pacotes
|
|
IPv6 devem ser encaminhados.
|
|
No início dos tempos de tunelamento 6to4, upstreams dedicados aceitavam
|
|
que os routers fizessem isso.
|
|
Veja
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "NSayer's 6to4 information"
|
|
target "http://www.kfu.com/~nsayer/6to4/"
|
|
|
|
\end_inset
|
|
|
|
para uma lista de routers.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Hoje em dia, os routers upstream 6to4 podem ser encontrados automaticamente,
|
|
usando o endereço de unicast 192.88.99.1.
|
|
Os protocolos de roteamento se incumbem desta função, veja
|
|
\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
|
|
|
|
para mais detalhes.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Tunelamento Downstream 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O downstream (6bone -> seu nó com 6to4 habilitado) não é realmente correto
|
|
e pode variar de um host remoto estranho que originou os pacotes que foram
|
|
enviados a voce.
|
|
Existem duas possibilidades:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Estes hosts remotos usam endereços 6to4 e enviam os pacotes de volta diretamente
|
|
a seu nó (veja abaixo)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Estes hosts remotos enviam os pacotes de volta à rede IPv6 e dependendo
|
|
do roteamento, um router no meio do caminho cria um túnel automaticamente
|
|
em direção ao seu nó.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Tráfego 6to4 possível
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
6to4 para 6to4: normalmente é um túnel direto entre as duas pontas, ambos
|
|
habilitados em 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
6to4 para não-6to4: é enviado via um túnel upstream
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
não-6to4 para 6to4: é enviado via um túnel downstream
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Mostrando os túneis existentes
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 tunnel show [<device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\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
|
|
Usando "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo (a saída está filtrada para mostrar somente os túneis através da
|
|
interface virtual 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
|
|
|
|
Configuração de um túnel ponto a ponto
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Existem possibilidades para adicionar ou remover um túnel ponto a ponto.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uma boa informação adicional sobre a configuração de túneis fornecida através
|
|
do comando
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
está aqui
|
|
\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
|
|
Adicionando túneis ponto a ponto
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Um método comum para a criação de uma quantidade pequena de túneis.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Use-o para criar um dispositivo túnel (mas não depois, o TTL também deve
|
|
ser especificado, porque seu valor default é 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
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
Usando "ifconfig" e "route" (obsoleto)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Esta não é uma maneira muito recomendada de se criar um túnel porque ele
|
|
é um pouco estranho.
|
|
Não há qualquer problema se voce adicionar somente um, mas se voce for
|
|
configurar mais de um, voce não poderá desfazer os primeiros túneis criados
|
|
e deixar os últimos em funcionamento.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
Importante: NÃO USE ISSO, porque esta configuração habilita implicitamente
|
|
um
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
tunelamento automático
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
de qualquer lugar na internet, e isto é um risco, então não o utilize.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Usando somente "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Também é possível configurar túneis no modo Non Broadcast Multiple Access
|
|
(NBMA), pois é uma maneira fácil de adicionar muitos túneis de uma vez.
|
|
Mas nenhum dos túneis pode ser numerado (o que não é uma característica).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
Importante: NÃO USE ISSO, porque esta configuração habilita implicitamente
|
|
um
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
tunelamento automático
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
de qualquer lugar na internet, e isto é um risco, então não o utilize.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Removendo os túneis ponto a ponto
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Nem sempre é necessário fazer isso manualmente, mas pode ser usado em scripts
|
|
para uma limpeza ou restart de uma configuração IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Usando "ip"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso para remover um dispositivo túnel:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip tunnel del <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
Usando "ifconfig" e "route" (não é mais usado por ser estranho)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Não somente a criação é estranha, como também o shutdown...
|
|
voce tem que remover os tuneis na ordem inversa em que eles foram criados.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
Usando "route"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Isto é como remover rotas normais em IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\align left
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
Tuneis ponto a ponto numerados
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Às vezes é necessário configurar túneis ponto a ponto com endereços IPv6
|
|
como em IPv4.
|
|
Isto somente é possível utilizando o primeiro (ifconfig+route - obsoleto)
|
|
e o terceiro (ip+route) modo de configuração.
|
|
Em tais casos, voce pode adicionar os endereços IPv6 na interface de túnel
|
|
conforme é mostrado na configuração de uma interface.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "configuring-ipv6to4-tunnels"
|
|
|
|
\end_inset
|
|
|
|
Configuração de túneis 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Preste atenção pois o suporte aos túneis 6to4 atualmente não está implementado
|
|
completamente no kernel vanilla da série 2.2.x (veja
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "systemcheck/kernel"
|
|
reference "systemcheck-kernel"
|
|
|
|
\end_inset
|
|
|
|
para mais detalhes).
|
|
Veja também que o tamanho do prefixo para um endereço 6to4 é 16, uma vez
|
|
que do ponto de vista da rede, todos os outros hosts habilitados para 6to4
|
|
estão na mesma camada 2.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Adição de um túnel 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Antes de tudo, voce precisa calcular o seu prefixo 6to4 usando o seu endereço
|
|
público IPv4 (se seu host não tem este endereço, é possível utilizar um
|
|
NAT no router de borda em alguns casos especiais):
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Assumindo que o seu endereço IPv4 seja este
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
1.2.3.4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
o prefixo 6to4 gerado será este
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2002:0102:0304::
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Gateways locais 6to4 deveriam (mas não é uma regra fixa, pois voce pode
|
|
escolher um sufixo arbitrário, se voce preferir) sempre assinalar o sufixo
|
|
"::1", desta forma seu endereço local 6to4 será este
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
2002:0102:0304::1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Por exemplo, use a seguinte automação:
|
|
\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
|
|
Atualmente existem duas maneiras possíveis de configurar um túnel 6to4.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Usando "ip" e um dispositivo de túnel dedicado
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Esta é a maneira recomendada (um TTL deve ser especificado, pois o valor
|
|
default é 0).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Criando um dispositivo de túnel
|
|
\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
|
|
Ativando a interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip link set dev tun6to4 up
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Adicionando o endereço local 6to4 na interface (nota: o tamanho do prefixo
|
|
- /16 - é importante!)
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 addr add <local6to4address>/16 dev tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Adicionando uma rota default para a rede global IPv6 usando o endereço anycast
|
|
IPv4 todos-6to4-router
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
É sabido que algumas versões do comando "ip" (exemplo SuSE Linux 9.0) não
|
|
suportam endereços IPv6 no formato compatível IPv4 para seus gateways,
|
|
e neste caso o endereço IPv6 relativo a ele deve ser usado:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route add 2000::/3 via 2002:c058:6301::1 dev tun6to4 metric
|
|
1
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Usando "ifconfig" e "route" e um dispositivo de túnel genérico "sit0" (obsoleto)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Este método está obsoleto porque o uso de um túnel genérico sit0 não permite
|
|
especificar filtros pelo dispositivo.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Ativando a interface genérica sit0
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig sit0 up
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Adicionando um endereço 6to4 na interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig sit0 add <local6to4address>/16
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Adicionando uma rota default para a rede global IPv6 usando o endereço anycast
|
|
IPv4 todos-6to4-router
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 add 2000::/3 gw ::192.88.99.1 dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Removendo um túnel 6to4
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Usando "ip" e um dispositivo de túnel dedicado
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remova todas as rotas que utilizam este dispositivo
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 route flush dev tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Desligue a interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip link set dev tun6to4 down
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remova o dispositivo criado
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip tunnel del tun6to4
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Usando "ifconfig" e "route" e o dispositivo genérico de túnel "sit0" (obsoleto)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remova as rotas default que usam esta interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/route -A inet6 del 2000::/3 gw ::192.88.99.1 dev sit0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Remova o endereço local 6to4 desta interface
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ifconfig sit0 del <local6to4address>/16
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Desligue o dispositivo genérico de túnel (cuidado com isto, pois ela ainda
|
|
pode estar em uso...)
|
|
\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
|
|
|
|
Configurando túneis IPv4-in-IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
A
|
|
\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
|
|
|
|
especifica o mecanismo para tunelar diferentes tipos de pacotes em IPv6
|
|
incluindo IPv4.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
NOTAE: O suporte para túneis IPv4-in-IPv6 está disponível somente a partir
|
|
da versão de kernel 2.6.22.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Mostrando os túneis existentes
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 tunnel show [<device>]
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exemplo:
|
|
\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
|
|
NOTA: Se voce não incluir "mode any", somente os túneis IPv6-in-IPv6 serão
|
|
mostrados.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Configuração de túnel ponto a ponto
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso para criar um dispositivo de túnel 4over6
|
|
\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
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
Removendo túneis ponto a ponto
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso ara remover um dispositivo de túnel:
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# /sbin/ip -6 tunnel del <device>
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Uso (exemplo genérico para 3 túneis):
|
|
\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
|
|
|
|
Configuraçoes de Kernel nos arquivos do /proc
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-filesystem"
|
|
|
|
\end_inset
|
|
|
|
Nota: a fonte desta seção é em sua maioria o arquivo "ip-sysctl.txt", o qual
|
|
está incluído no diretório "Documentation/networking" do código fonte do
|
|
kernel usado.
|
|
Crédito para Pekka Savola pela manutençao da parte IPv6 neste arquivo.
|
|
Além disso, muito do que está escrito abaixo é um Copy & Paste deste arquivo
|
|
mencionado.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
Como acessar os arquivos do /proc
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "cat" e "echo"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Usar os comandos "cat" e "echo" é a maneira mais simples de acessar os arquivos
|
|
deste diretório, mas alguns pontos devem ser observados:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
O sistema de arquivos /proc deve estar habilitado no kernel , ou seja, a
|
|
seguinte chave deve estar configurada
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
CONFIG_PROC_FS=y
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
O sistema de arquivos já deve estar montado, o que pode ser testado como
|
|
comando
|
|
\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
|
|
Voce pode ler e também escrever (geralmente como root) nos arquivos contidos
|
|
aqui (/proc)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Normalmente, somente as entradas localizadas em /proc/sys/* podem ser alteradas,
|
|
as demais são somentepara leitura e para obtenção de informações.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Obtendo um valor
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O valor de uma entrada pode ser obtido com o comando "cat":
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# cat /proc/sys/net/ipv6/conf/all/forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
0
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Definindo um valor
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um novo valor pode ser definido (se a entrada aceitar a escrita) através
|
|
do comando "echo":
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
# echo "1" >/proc/sys/net/ipv6/conf/all/forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Usando "sysctl"
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O uso do programa "syysctl" para acessar as chaves do kernel é uma maneira
|
|
moderna utilizada hoje em dia.
|
|
Voce também pode usar se o sistema de arquivos /proc não estiver montado.
|
|
Mas voce só terá acesso às entradas /proc/sys/*!
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O programa "sysctl" está incluído no pacote "procps" (em sistemas Red Hat
|
|
Linux).
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
A interface do sysctl deve estar habilitada no kernel, então a seguinte
|
|
chave deve estar habilitada
|
|
\end_layout
|
|
|
|
\begin_layout Code
|
|
|
|
CONFIG_SYSCTL=y
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
Obtendo um valor
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O valor de uma entrada pode ser obtida da seguinte maneira:
|
|
\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
|
|
Definindo um valor
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Um novo valor pode ser definido (se a entrada aceitar a escrita):
|
|
\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
|
|
Nota: Não use espaços entre o sinal = para definir os valores.
|
|
Se forem possíveis diversos valores, coloque-os entre aspas
|
|
\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
|
|
Adicionais
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: Existem versões em campo que mostram "/" ao invés de "."
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Para mais detalhes, de uma olhada na manpage do sysctl.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Dica: para achar mais rapidamente as definiçoes, use a opçao "-a" (mostra
|
|
todas as entradas) junto com o comando "grep".
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
Valores encontrados nas entradas /proc
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Existem vários formatos vistos no sistema de arquivos /proc:
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
BOOLEANO: simplesmente um "0" (falso) ou um "1" (verdadeiro)
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
INTEIRO: um valor inteiro, também pode ser sem sinal
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
linhas mais sofisticadas com muitos valores: às vezes uma linha de cabeçalho
|
|
também é mostrada, senão, uma olhada no código fonte do kernel pode ser
|
|
necessário para entender o significado dos valores apresentados...
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-sys-net-ipv6"
|
|
|
|
\end_inset
|
|
|
|
Entradas em /proc/sys/net/ipv6/
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
conf/default/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Muda as configurações específicas da interface.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
conf/all/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Muda todas as configurações esoecíficas da interface.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Exceção: "conf/all/forwarding" tem um significado diferente aqui
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
conf/all/forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: BOOLEANO
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Isto habilita o encaminhamento de pacotes IPv6 entre todas as interfaces.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Em IPv6 voce não pode controlar o envio de pacotes por dispositivo.
|
|
este encaminhamento deve ser feito através de regras do IPv6-netfilter
|
|
(controlado com ip6tables) e especificando os dispositivos de entrada e
|
|
saída (veja
|
|
\begin_inset CommandInset ref
|
|
LatexCommand ref
|
|
name "Firewalling/Netfilter6"
|
|
reference "firewalling-netfilter6"
|
|
|
|
\end_inset
|
|
|
|
para mais detalhes).
|
|
Isto é diferente no IPv4, onde é possível controlar o encaminhamento por
|
|
dispositivo (a decisão é feita na interface onde o pacote entra).
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Isto também define todas as interfaces do host e/ou router para o valor
|
|
especificado.
|
|
Veja os detalhes abaixo.
|
|
Esta definição refere-se ao encaminhamento global.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Se este valor é 0, nenhum pacote IPv6 é encaminhado, os pacotes nunca deixarão
|
|
outra interface, seja ela física ou lógica, como os túneis.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
conf/interface/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Muda configurações especiais por interface.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
O comportamento funcional de certos ajustes é diferente, dependendo se o
|
|
encaminhamento local está habilitado ou não.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
accept_ra
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Ajuste default: habilitado se o encaminhamento local está desabilitado,
|
|
e desabilitado se o encaminhamento local está habilitado.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aceita Router Advertisements, e configura automaticamente esta interface
|
|
com os dados recebidos.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
accept_redirects
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipi: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Ajuste default: habilitado se o encaminhamento local está desabilitado,
|
|
e desabilitado se o encaminhamento local está habilitado.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aceita os Redirects enviados por um router IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
autoconf
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Ajuste default: habilitado se o accept_ra_pinfo está babilitado, e desabilitado
|
|
se o accept_ra_pinfo estiver desabilitado.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Os endereços e prefixos usados na configuração automática proveem de anúncios
|
|
dos routers.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
dad_transmits
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Quantidade de probes de detecção de endereços duplicados enviados.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
forwarding
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: BOOLEAN
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: FALSE se o encaminhamento global estiver desabilitado (default),
|
|
caso contrário TRUE
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Comportamento Host/Router específico.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Nota: É recomendado ter a mesma configuração em todas as interfaces; cenários
|
|
diferentes são bem incomuns.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Valor FALSE: Por default, o comportamento do Host é assumido.
|
|
Isto significa:
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
O flag IsRouter não está definido em aúncios de vizinhança.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Solicitaçoes Router são enviados quando necessário.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Se accept_ra é TRUE (default), aceita anúncios router (e fazem auti configuração
|
|
).
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Se accept_redirects é TRUE (default), aceita Redirects.
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Valor TRUE: se o encaminhamento local está habilitado, o comportamento Router
|
|
é assumido.
|
|
Isto significa que o contrário da lista acima pode acontecer:
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
O flag IsRouter é definido nos anúncios de vizinhança.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Solicitaçoes Router não são enviadas.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Anúncios Router são ignorados.
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Redirects são ignorados.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
hop_limit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 64
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Hop Limit default para definir.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
mtu
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1280 (mínimo necessário no IPv6)
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Default Maximum Transfer Unit
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
router_solicitation_delay
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Número de segundos a esperar após a interface ser ativada antes de enviar
|
|
solicitaçoes Router.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
router_solicitation_interval
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 4
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Número de segundos a esperar entre solicitaçoes Router.
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
router_solicitations
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Número de solicitaçoes Router a enviar até assumir que não há um router
|
|
presente.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
neigh/default/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Muda as definiçoes default para detecçao de vizinhos e alguns valores globais
|
|
e de limites:
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh1
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 128
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh2
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 512
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh3
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1024
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Parametro para o tamanho da tabela de vizinhança.
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aumente este valor se voce tem muitas interfaces e os routers começam a
|
|
apresentar problemas misteriosos de funcionamento e falhas.
|
|
Ou se uma mensagem dessas aparecer
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Zebra (routing daemon)"
|
|
target "http://www.zebra.org/"
|
|
|
|
\end_inset
|
|
|
|
:
|
|
\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
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 30
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
neigh/interface/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Muda ajustes especiais por interface para detecção de vizinhos.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
anycast_delay
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 100
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_stale_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 60
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
proxy_qlen
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 64
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
unres_qlen
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
app_solicit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
locktime
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
retrans_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 100
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
base_reachable_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 30
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
mcast_solicit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ucast_solicit
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 3
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
delay_first_probe_time
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 5
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
proxy_delay
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 80
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
route/*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Ajustes globais para roteamento.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
flush
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Removido nas novas versões de kernel - Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_interval
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 30
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_thresh
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 1024
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
mtu_expires
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 600
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_elasticity
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 0
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_min_interval
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 5
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
gc_timeout
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 60
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
min_adv_mss
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 12
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
max_size
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: INTEGER
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Default: 4096
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-sys-net-ipv4"
|
|
|
|
\end_inset
|
|
|
|
Entradas relacionadas a IPv6 em /proc/sys/net/ipv4/
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Neste momento (e será até que o IPv6 seja completamente convertido para
|
|
um módulo independente do kernel) algumas chaves para IPv6 são usadas aqui.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ip_*
|
|
\end_layout
|
|
|
|
\begin_layout Subsubsection
|
|
ip_local_port_range
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Esta definição também é usada para o IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
tcp_*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Esta definição também é usada para o IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
icmp_*
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Esta definição não é usada para o IPv6.
|
|
Para habilitar o limite ICMPv6 (o que é muito recomendado) regras netfilter-v6
|
|
devem ser usadas.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
others
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Desconhecido, mas provavelmente não usado pelo IPv6.
|
|
\end_layout
|
|
|
|
\begin_layout Section
|
|
\begin_inset CommandInset label
|
|
LatexCommand label
|
|
name "proc-net"
|
|
|
|
\end_inset
|
|
|
|
Entradas em /proc/net relacionadas com IPv6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
No /proc/net existem diversas variáveis disponíveis, somente para leitura,
|
|
Não é possível obter informaçoes através do "sysctl", então utilize "cat".
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
if_inet6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: Uma linha por endereço contendo vários valores
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aqui todos os endereços IPv6 cpnfigurados são mostrados em um formato especial.
|
|
O exemplo mostra somente a interface de loopback.
|
|
O significado é mostrado abaixo (veja "net/ipv6/addrconf.c" para mais informaçõe
|
|
s).
|
|
\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
|
|
Endereço IPv6 mostrado em hexadecimal (32 caracteres) sem os dois pontos
|
|
":" como separadores
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Número do dispositivo netlink (índice da interface) em hexadecimal (veja
|
|
|
|
\begin_inset Quotes sld
|
|
\end_inset
|
|
|
|
ip addr
|
|
\begin_inset Quotes srd
|
|
\end_inset
|
|
|
|
, também)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
tamanho do prefixo, em hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Valor do escopo (veja o fonte do kernel " include/net/ipv6.h" e "net/ipv6/addrcon
|
|
f.c" para mais informações)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Flags da interface (veja "include/linux/rtnetlink.h" e"net/ipv6/addrconf.c"
|
|
para mais informações)
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Nome do disppositivo
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ipv6_route
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: Uma linha por rota contém várias valores
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Aqui toda a configuração de rotas em IPv6 é mostrada em um formato especialt.
|
|
O exemplo mostra informações somente para a interface de loopback O significado
|
|
é mostrado abaixo (veja "net/ipv6/route.c" para mais informações).
|
|
\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
|
|
Rede de destino IPv6 mostrada em hexadecimal (32 caracteres) som dois pontos
|
|
":" como separador
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Tamanho do prefixo de destino, em hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Rede de origem IPv6 mostrada em hexadecimal (32 caracteres) som dois pontos
|
|
":" como separador
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Tamanho do prefixo de origem, em hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Próximo salto IPv6 mostrado em hexadecimal (32 caracteres) som dois pontos
|
|
":" como separador
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Métrica em hexadecimal
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Contador de referencia
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Contadoer de uso
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Flags
|
|
\end_layout
|
|
|
|
\begin_layout Enumerate
|
|
Nome do dispositivo
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
sockstat6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: Uma linha por protocolo, com descrição e valor
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Estatísticas sobre o uso de sockets IPv6.
|
|
Exemplo:
|
|
\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
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
udp6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
igmp6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
raw6
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ip6_flowlabel
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
rt6_stats
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Precisa ser preenchido.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
snmp6
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
Tipo: Uma linha por descrição SNMP e valor
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Estatísticas SNMP podem ser obtidas via um servidor SNMP e suas MIB's relacionad
|
|
as, através um software de gerencia de rede.
|
|
\end_layout
|
|
|
|
\begin_layout Subsection
|
|
ip6_tables_names
|
|
\end_layout
|
|
|
|
\begin_layout Standard
|
|
Tabelas netfilter6 disponíveis
|
|
\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
|
|
\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
|
|
Stateful 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 1.2.3.4
|
|
\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 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!
|
|
\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=start
|
|
\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 "Inframail (Advantage Server Edition)"
|
|
target "http://download.cnet.com/Inframail-Advantage-Server-Edition/3000-10248_4-8202652.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "HTTrack Website Copier"
|
|
target "http://download.cnet.com/HTTrack-Website-Copier/3000-2377_4-10149393.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "CommView"
|
|
target "http://download.cnet.com/CommView/3000-2085_4-10132748.html"
|
|
|
|
\end_inset
|
|
|
|
|
|
\end_layout
|
|
|
|
\begin_layout Itemize
|
|
\begin_inset CommandInset href
|
|
LatexCommand href
|
|
name "Posadis"
|
|
target "http://download.cnet.com/Posadis/3000-2155_4-10149750.html"
|
|
|
|
\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 rotate="0" 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.65 2010-04-20/PB: extend QoS section with examples
|
|
\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
|