gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnunet-texinfo] branch master updated: user.texi: all line


From: gnunet
Subject: [GNUnet-SVN] [gnunet-texinfo] branch master updated: user.texi: all lines end at character 80 now.
Date: Fri, 17 Mar 2017 15:50:25 +0100

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnunet-texinfo.

The following commit(s) were added to refs/heads/master by this push:
     new 12bd860  user.texi: all lines end at character 80 now.
12bd860 is described below

commit 12bd86036bf43576861037a393a3f82916daef7c
Author: ng0 <address@hidden>
AuthorDate: Fri Feb 17 16:57:58 2017 +0000

    user.texi: all lines end at character 80 now.
---
 user.texi | 1241 +++++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 708 insertions(+), 533 deletions(-)

diff --git a/user.texi b/user.texi
index efea6c9..4e640a7 100644
--- a/user.texi
+++ b/user.texi
@@ -96,6 +96,8 @@ command-line by typing@
 Depending on your distribution, you may also find @code{gnunet-gtk} in your
 menus. After starting @code{gnunet-gtk}, you should see the following window:
 
address@hidden/gnunet-gtk-0-10.png,5in,, picture of gnunet-gtk application}
+
 The five images on top represent the five different graphical applications that
 you can use within @code{gnunet-gtk}. They are (from left to right):
 @itemize @bullet
@@ -147,23 +149,6 @@ connectivity, there is likely a problem with your network 
configuration.
 
 
 @multitable @columnfractions 0.333333333333333 0.333333333333333 
0.333333333333333
-
address@hidden Attachment
-
address@hidden Size
-
address@hidden  gnunet-gtk-0-10.png
-
address@hidden 71.19 KB
-
address@hidden  gnunet-gtk-0-10-traffic.png
-
address@hidden 66.91 KB
-
address@hidden  gnunet-0-10-peerinfo.png
-
address@hidden 78.25 KB
-
 @end multitable
 @settitle First steps: File-sharing
 @c %**end of header
@@ -273,59 +258,6 @@ respective download and selecting "Abort download" from 
the menu.
 That's it, you now know the basics for file-sharing with GNUnet!
 
 @multitable @columnfractions 0.0833333333333333 0.0833333333333333 
0.0833333333333333 0.0833333333333333 0.0833333333333333 0.0833333333333333 
0.0833333333333333 0.0833333333333333 0.0833333333333333 0.0833333333333333 
0.0833333333333333 0.0833333333333333
-
address@hidden Attachment
-
address@hidden Size
-
address@hidden  gnunet-gtk-0-10-fs.png
-
address@hidden 54.4 KB
-
address@hidden  gnunet-gtk-0-10-fs-menu.png
-
address@hidden 8.41 KB
-
address@hidden  gnunet-gtk-0-10-fs-publish.png
-
address@hidden 25.88 KB
-
address@hidden  gnunet-gtk-0-10-fs-publish-select.png
-
address@hidden 42.43 KB
-
address@hidden  gnunet-gtk-0-10-fs-publish-with-file.png
-
address@hidden 26.73 KB
-
address@hidden  gnunet-gtk-0-10-fs-publish-editing.png
-
address@hidden 54.21 KB
-
address@hidden  gnunet-gtk-0-10-fs-publish-with-file.png
-
address@hidden 26.73 KB
-
address@hidden  gnunet-gtk-0-10-fs-published.png
-
address@hidden 58.24 KB
-
address@hidden  gnunet-gtk-0-10-search-selected.png
-
address@hidden 102.15 KB
-
address@hidden  gnunet-gtk-0-10-fs-search.png
-
address@hidden 70.46 KB
-
address@hidden  gnunet-gtk-0-10-download-area.png
-
address@hidden 7.46 KB
-
address@hidden  gnunet-fs-gtk-0-10-star-tab.png
-
address@hidden 61.98 KB
-
 @end multitable
 
 @settitle First steps: Using the GNU Name System
@@ -544,35 +476,6 @@ with the next GNUnet release for even more applications 
using this new
 public key infrastructure.
 
 @multitable @columnfractions 0.166666666666667 0.166666666666667 
0.166666666666667 0.166666666666667 0.166666666666667 0.166666666666667
-
address@hidden Attachment
-
address@hidden Size
-
address@hidden  gnunet-gtk-0-10-identity.png
-
address@hidden 60.94 KB
-
address@hidden  gnunet-gtk-0-10-gns-a-done.png
-
address@hidden 30.16 KB
-
address@hidden  gnunet-gtk-0-10-gns-a.png
-
address@hidden 29.19 KB
-
address@hidden  gnunet-gtk-0-10-gns.png
-
address@hidden 62.29 KB
-
address@hidden  iceweasel-proxy.png
-
address@hidden 37.86 KB
-
address@hidden  iceweasel-preferences.png
-
address@hidden 55.71 KB
-
 @end multitable
 
 @settitle First steps: Using GNUnet Conversation
@@ -650,840 +553,1112 @@ typing in the peer identity manually. Save the record.
 @c %**end of header
 @node Top
 
-
-
- Now you can call a buddy. Obviously, your buddy will have to have GNUnet 
installed and must have performed the same steps. Also, you must have your 
buddy in your GNS master zone, for example by having imported your buddy's 
public key using @code{gnunet-qr}. Suppose your buddy is in your zone as 
@code{buddy.gnu} and he also created his phone using a label "home-phone". Then 
you can initiate a call using:@
+Now you can call a buddy. Obviously, your buddy will have to have GNUnet
+installed and must have performed the same steps. Also, you must have your 
buddy
+in your GNS master zone, for example by having imported your buddy's public key
+using @code{gnunet-qr}. Suppose your buddy is in your zone as @code{buddy.gnu}
+and he also created his phone using a label "home-phone". Then you can initiate
+a call using:@
 @code{@
  /call home-phone.buddy.gnu@
 }@
- It may take some time for GNUnet to resolve the name and to establish a link. 
If your buddy has your public key in his master zone, he should see an incoming 
call with your name. If your public key is not in his master zone, he will just 
see the public key as the caller ID. 
 
- Your buddy then can answer the call using the "/accept" command. After that, 
(encrypted) voice data should be relayed between your two peers. Either of you 
can end the call using "/cancel". You can exit @code{gnunet-converation} using 
"/quit". @settitle Future Directions
address@hidden %**end of header
-
address@hidden Top
+It may take some time for GNUnet to resolve the name and to establish a link. 
If
+your buddy has your public key in his master zone, he should see an incoming
+call with your name. If your public key is not in his master zone, he will just
+see the public key as the caller ID. 
 
+Your buddy then can answer the call using the "/accept" command. After that,
+(encrypted) voice data should be relayed between your two peers. Either of you
+can end the call using "/cancel". You can exit @code{gnunet-converation} using
+"/quit".
 
address@hidden Future Directions
address@hidden %**end of header
address@hidden Top
 
-Note that we do not envision people to use gnunet-conversation like this 
forever. We will write a graphical user interface, and that GUI will 
automatically create the necessary records in the respective zone.
address@hidden @bullet
-
-
address@hidden
-
address@hidden itemize
-
address@hidden @asis
-
address@hidden Attachment
-Size
-
address@hidden  gnunet-namestore-gtk-phone.png
-31.87 KB
+Note that we do not envision people to use gnunet-conversation like this
+forever. We will write a graphical user interface, and that GUI will
+automatically create the necessary records in the respective zone.
 
address@hidden table
 @settitle First steps: Using the GNUnet VPN
 @c %**end of header
-
 @node Top
 
 @settitle Preliminaries
 @c %**end of header
-
 @node Top
 
+To test the GNUnet VPN, we should first run a web server. The easiest way to do
+this is to just start @code{gnunet-bcd}, which will run a webserver on port
address@hidden by default. Naturally, you can run some other HTTP server for our
+little tutorial.
 
-
-To test the GNUnet VPN, we should first run a web server. The easiest way to 
do this is to just start @code{gnunet-bcd}, which will run a webserver on port 
@code{8888} by default. Naturally, you can run some other HTTP server for our 
little tutorial.
-
-If you have not done this, you should also configure your Name System Service 
switch to use GNS. In your @code{/etc/nsswitch.conf} you should fine a line 
like this:
address@hidden:          files mdns4_minimal [NOTFOUND=return] dns mdns4
+If you have not done this, you should also configure your Name System Service
+switch to use GNS. In your @code{/etc/nsswitch.conf} you should fine a line 
like
+this:
address@hidden
+hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
 @end example
 
-
-The exact details may differ a bit, which is fine. Add the text @code{gns 
[NOTFOUND=return]} after @code{files}:
address@hidden:          files gns [NOTFOUND=return] mdns4_minimal 
[NOTFOUND=return] dns mdns4
+The exact details may differ a bit, which is fine. Add the text
address@hidden [NOTFOUND=return]} after @code{files}:
address@hidden
+hosts:          files gns [NOTFOUND=return] mdns4_minimal [NOTFOUND=return] 
dns mdns4
 @end example
 
 
-You might want to make sure that @code{/lib/libnss_gns.so.2} exists on your 
system, it should have been created during the installation. If not, re-run
address@hidden configure --with-nssdir=/lib
+You might want to make sure that @code{/lib/libnss_gns.so.2} exists on your
+system, it should have been created during the installation. If not, re-run
address@hidden
+$ configure --with-nssdir=/lib
 $ cd src/gns/nss; sudo make install
 @end example
 
+to install the NSS plugins in the proper location.
 
-to install the NSS plugins in the proper address@hidden Exit configuration
address@hidden Exit configuration
 @c %**end of header
-
 @node Top
 
+Stop your peer (as user @code{gnunet}, run @code{gnunet-arm -e}) and run
address@hidden In @code{gnunet-setup}, make sure to activate the
address@hidden and @strong{GNS} services in the General tab. Then select the 
Exit
+tab. Most of the defaults should be fine (but you should check against the
+screenshot that they have not been modified). In the bottom area, enter
address@hidden under Identifier and change the Destination to
address@hidden:8888} (if your server runs on a port other than 8888, change
+the 8888 port accordingly).
 
+Now exit @code{gnunet-setup} and restart your peer (@code{gnunet-arm -s}).
 
-Stop your peer (as user @code{gnunet}, run @code{gnunet-arm -e}) and run 
@code{gnunet-setup}. In @code{gnunet-setup}, make sure to activate the 
@strong{EXIT} and @strong{GNS} services in the General tab. Then select the 
Exit tab. Most of the defaults should be fine (but you should check against the 
screenshot that they have not been modified). In the bottom area, enter 
@code{bcd} under Identifier and change the Destination to 
@code{169.254.86.1:8888} (if your server runs on a port other  [...]
-
-@
-@
-
-
-Now exit @code{gnunet-setup} and restart your peer (@code{gnunet-arm 
-s})address@hidden GNS configuration
address@hidden GNS configuration
 @c %**end of header
-
 @node Top
 
+Now, using your normal user (not the @code{gnunet} system user), run
address@hidden Select the GNS icon and add a new label www in your master
+zone. For the record type, select @code{VPN}. You should then see the VPN
+dialog:
 
-
-Now, using your normal user (not the @code{gnunet} system user), run 
@code{gnunet-gtk}. Select the GNS icon and add a new label www in your master 
zone. For the record type, select @code{VPN}. You should then see the VPN 
dialog:
-
-@
-@
-@
- Under peer, you need to supply the peer identity of your own peer. You can 
obtain the respective string by running@
+Under peer, you need to supply the peer identity of your own peer. You can
+obtain the respective string by running@
 @code{@
  $ gnunet-peerinfo -sq@
 }@
- as the @code{gnunet} user. For the Identifier, you need to supply the same 
identifier that we used in the Exit setup earlier, so here supply "bcd". If you 
want others to be able to use the service, you should probably make the record 
public. For non-public services, you should use a passphrase instead of the 
string "bcd". Save the record and exit @code{gnunet-gtk}. @settitle Accessing 
the service
address@hidden %**end of header
+as the @code{gnunet} user. For the Identifier, you need to supply the same
+identifier that we used in the Exit setup earlier, so here supply "bcd". If you
+want others to be able to use the service, you should probably make the record
+public. For non-public services, you should use a passphrase instead of the
+string "bcd". Save the record and exit @code{gnunet-gtk}.
 
address@hidden Accessing the service
address@hidden %**end of header
 @node Top
 
-
-
 You should now be able to access your webserver. Type in:@
 @code{@
  $ wget http://www.gnu/@
 }@
- The request will resolve to the VPN record, telling the GNS resolver to route 
it via the GNUnet VPN. The GNS resolver will ask the GNUnet VPN for an IPv4 
address to return to the application. The VPN service will use the VPN 
information supplied by GNS to create a tunnel (via GNUnet's MESH service) to 
the EXIT peer. At the EXIT, the name "bcd" and destination port (80) will be 
mapped to the specified destination IP and port. While all this is currently 
happening on just the local machin [...]
address@hidden %**end of header
+The request will resolve to the VPN record, telling the GNS resolver to route 
it
+via the GNUnet VPN. The GNS resolver will ask the GNUnet VPN for an IPv4 
address
+to return to the application. The VPN service will use the VPN information
+supplied by GNS to create a tunnel (via GNUnet's MESH service) to the EXIT 
peer.
+At the EXIT, the name "bcd" and destination port (80) will be mapped to the
+specified destination IP and port. While all this is currently happening on 
just
+the local machine, it should also work with other peers --- naturally, they 
will
+need a way to access your GNS zone first, for example by learning your public
+key from a QR code on your business card.
 
address@hidden Using a Browser
address@hidden %**end of header
 @node Top
 
+Sadly, modern browsers tend to bypass the Name Services Switch and attempt DNS
+resolution directly. You can either run a @code{gnunet-dns2gns} DNS proxy, or
+point the browsers to an HTTP proxy. When we tried it, Iceweasel did not like 
to
+connect to the socks proxy for @code{.gnu} TLDs, even if we disabled its
+autoblunder of changing @code{.gnu} to ".gnu.com". Still, using the HTTP proxy
+with Chrome does work.
 
-
-Sadly, modern browsers tend to bypass the Name Services Switch and attempt DNS 
resolution directly. You can either run a @code{gnunet-dns2gns} DNS proxy, or 
point the browsers to an HTTP proxy. When we tried it, Iceweasel did not like 
to connect to the socks proxy for @code{.gnu} TLDs, even if we disabled its 
autoblunder of changing @code{.gnu} to ".gnu.com". Still, using the HTTP proxy 
with Chrome does work.
address@hidden @bullet
-
-
address@hidden
-
address@hidden itemize
-
address@hidden @asis
-
address@hidden Attachment
-Size
-
address@hidden  gnunet-setup-exit.png
-29.36 KB
-
address@hidden  gnunet-namestore-gtk-vpn.png
-35 KB
-
address@hidden table
 @settitle File-sharing
 @c %**end of header
-
 @node Top
 
+This chapter documents the GNUnet file-sharing application. The original
+file-sharing implementation for GNUnet was designed to provide
address@hidden file-sharing. However, over time, we have also added support
+for non-anonymous file-sharing (which can provide better performance). 
Anonymous
+and non-anonymous file-sharing are quite integrated in GNUnet and, except for
+routing, share most of the concepts and implementation. There are three primary
+file-sharing operations: publishing, searching and downloading. For each of
+these operations, the user specifies an @strong{anonymity level}. If both the
+publisher and the searcher/downloader specify "no anonymity", non-anonymous
+file-sharing is used. If either user specifies some desired degree of 
anonymity,
+anonymous file-sharing will be used.
 
+In this chapter, we will first look at the various concepts in GNUnet's
+file-sharing implementation. Then, we will discuss specifics as to how they
+impact users that publish, search or download files.
 
-This chapter documents the GNUnet file-sharing application. The original 
file-sharing implementation for GNUnet was designed to provide 
@strong{anonymous} file-sharing. However, over time, we have also added support 
for non-anonymous file-sharing (which can provide better performance). 
Anonymous and non-anonymous file-sharing are quite integrated in GNUnet and, 
except for routing, share most of the concepts and implementation. There are 
three primary file-sharing operations: publishing,  [...]
-
-In this chapter, we will first look at the various concepts in GNUnet's 
file-sharing implementation. Then, we will discuss specifics as to how they 
impact users that publish, search or download files.
 @settitle File-sharing: Concepts
 @c %**end of header
-
 @node Top
 
+Sharing files in GNUnet is not quite as simple as in traditional file sharing
+systems. For example, it is not sufficient to just place files into a specific
+directory to share them. In addition to anonymous routing GNUnet attempts to
+give users a better experience in searching for content. GNUnet uses
+cryptography to safely break content into smaller pieces that can be obtained
+from different sources without allowing participants to corrupt files. GNUnet
+makes it difficult for an adversary to send back bogus search results. GNUnet
+enables content providers to group related content and to establish a
+reputation. Furthermore, GNUnet allows updates to certain content to be made
+available. This section is supposed to introduce users to the concepts that are
+used to achive these goals.
 
-
-Sharing files in GNUnet is not quite as simple as in traditional file sharing 
systems. For example, it is not sufficient to just place files into a specific 
directory to share them. In addition to anonymous routing GNUnet attempts to 
give users a better experience in searching for content. GNUnet uses 
cryptography to safely break content into smaller pieces that can be obtained 
from different sources without allowing participants to corrupt files. GNUnet 
makes it difficult for an adversa [...]
address@hidden Files
 @c %**end of header
-
 @node Top
 
+A file in GNUnet is just a sequence of bytes. Any file-format is allowed and 
the
+maximum file size is theoretically 264 bytes, except that it would take an
+impractical amount of time to share such a file. GNUnet itself never interprets
+the contents of shared files, except when using GNU libextractor to obtain
+keywords.
 
-
-A file in GNUnet is just a sequence of bytes. Any file-format is allowed and 
the maximum file size is theoretically 264 bytes, except that it would take an 
impractical amount of time to share such a file. GNUnet itself never interprets 
the contents of shared files, except when using GNU libextractor to obtain 
address@hidden Keywords
address@hidden Keywords
 @c %**end of header
-
 @node Top
 
+Keywords are the most simple mechanism to find files on GNUnet. Keywords are
address@hidden and the search string must always match @strong{exactly}
+the keyword used by the person providing the file. Keywords are never
+transmitted in plaintext. The only way for an adversary to determine the 
keyword
+that you used to search is to guess it (which then allows the adversary to
+produce the same search request). Since providing keywords by hand for each
+shared file is tedious, GNUnet uses GNU libextractor to help automate this
+process. Starting a keyword search on a slow machine can take a little while
+since the keyword search involves computing a fresh RSA key to formulate the
+request.
 
-
-Keywords are the most simple mechanism to find files on GNUnet. Keywords are 
@strong{case-sensitive} and the search string must always match 
@strong{exactly} the keyword used by the person providing the file. Keywords 
are never transmitted in plaintext. The only way for an adversary to determine 
the keyword that you used to search is to guess it (which then allows the 
adversary to produce the same search request). Since providing keywords by hand 
for each shared file is tedious, GNUnet u [...]
address@hidden Directories
 @c %**end of header
-
 @node Top
 
+A directory in GNUnet is a list of file identifiers with meta data. The file
+identifiers provide sufficient information about the files to allow downloading
+the contents. Once a directory has been created, it cannot be changed since it
+is treated just like an ordinary file by the network. Small files (of a few
+kilobytes) can be inlined in the directory, so that a separate download becomes
+unnecessary.
 
-
-A directory in GNUnet is a list of file identifiers with meta data. The file 
identifiers provide sufficient information about the files to allow downloading 
the contents. Once a directory has been created, it cannot be changed since it 
is treated just like an ordinary file by the network. Small files (of a few 
kilobytes) can be inlined in the directory, so that a separate download becomes 
address@hidden Pseudonyms
address@hidden Pseudonyms
 @c %**end of header
-
 @node Top
 
+Pseudonyms in GNUnet are essentially public-private (RSA) key pairs that allow 
a
+GNUnet user to maintain an identity (which may or may not be detached from his
+real-life identity). GNUnet's pseudonyms are not file-sharing specific --- and
+they will likely be used by many GNUnet applications where a user identity is
+required.
 
+Note that a pseudonym is NOT bound to a GNUnet peer. There can be multiple
+pseudonyms for a single user, and users could (theoretically) share the private
+pseudonym keys (currently only out-of-band by knowing which files to copy
+around).
 
-Pseudonyms in GNUnet are essentially public-private (RSA) key pairs that allow 
a GNUnet user to maintain an identity (which may or may not be detached from 
his real-life identity). GNUnet's pseudonyms are not file-sharing specific --- 
and they will likely be used by many GNUnet applications where a user identity 
is required.
-
-Note that a pseudonym is NOT bound to a GNUnet peer. There can be multiple 
pseudonyms for a single user, and users could (theoretically) share the private 
pseudonym keys (currently only out-of-band by knowing which files to copy 
around). @settitle Namespaces
address@hidden Namespaces
 @c %**end of header
-
 @node Top
 
+A namespace is a set of files that were signed by the same pseudonym. Files (or
+directories) that have been signed and placed into a namespace can be updated.
+Updates are identified as authentic if the same secret key was used to sign the
+update. Namespaces are also useful to establish a reputation, since all of the
+content in the namespace comes from the same entity (which does not have to be
+the same person).
 
-
-A namespace is a set of files that were signed by the same pseudonym. Files 
(or directories) that have been signed and placed into a namespace can be 
updated. Updates are identified as authentic if the same secret key was used to 
sign the update. Namespaces are also useful to establish a reputation, since 
all of the content in the namespace comes from the same entity (which does not 
have to be the same person)address@hidden Advertisements
address@hidden Advertisements
 @c %**end of header
-
 @node Top
 
+Advertisements are used to notify other users about the existence of a
+namespace. Advertisements are propagated using the normal keyword search. When
+an advertisement is received (in response to a search), the namespace is added
+to the list of namespaces available in the namespace-search dialogs of
+gnunet-fs-gtk and printed by gnunet-pseudonym. Whenever a namespace is created,
+an appropriate advertisement can be generated. The default keyword for the
+advertising of namespaces is "namespace".
 
+Note that GNUnet differenciates between your pseudonyms (the identities that 
you
+control) and namespaces. If you create a pseudonym, you will not automatically
+see the respective namespace. You first have to create an advertisement for the
+namespace and find it using keyword search --- even for your own namespaces. 
The
address@hidden tool is currently responsible for both managing
+pseudonyms and namespaces. This will likely change in the future to reduce the
+potential for confusion.
 
-Advertisements are used to notify other users about the existence of a 
namespace. Advertisements are propagated using the normal keyword search. When 
an advertisement is received (in response to a search), the namespace is added 
to the list of namespaces available in the namespace-search dialogs of 
gnunet-fs-gtk and printed by gnunet-pseudonym. Whenever a namespace is created, 
an appropriate advertisement can be generated. The default keyword for the 
advertising of namespaces is "namespace".
-
-Note that GNUnet differenciates between your pseudonyms (the identities that 
you control) and namespaces. If you create a pseudonym, you will not 
automatically see the respective namespace. You first have to create an 
advertisement for the namespace and find it using keyword search --- even for 
your own namespaces. The @code{gnunet-pseudonym} tool is currently responsible 
for both managing pseudonyms and namespaces. This will likely change in the 
future to reduce the potential for confus [...]
address@hidden Anonymity level
 @c %**end of header
-
 @node Top
 
+The anonymity level determines how hard it should be for an adversary to
+determine the identity of the publisher or the searcher/downloader. An
+anonymity level of zero means that anonymity is not required. The default
+anonymity level of "1" means that anonymous routing is desired, but no
+particular amount of cover traffic is necessary. A powerful adversary might 
thus
+still be able to deduce the origin of the traffic using traffic analysis.
+Specifying higher anonymity levels increases the amount of cover traffic
+required. While this offers better privacy, it can also significantly hurt
+performance.
 
-
-The anonymity level determines how hard it should be for an adversary to 
determine the identity of the publisher or the searcher/downloader. An 
anonymity level of zero means that anonymity is not required. The default 
anonymity level of "1" means that anonymous routing is desired, but no 
particular amount of cover traffic is necessary. A powerful adversary might 
thus still be able to deduce the origin of the traffic using traffic analysis. 
Specifying higher anonymity levels increases the [...]
address@hidden Content Priority
 @c %**end of header
-
 @node Top
 
+Depending on the peer's configuration, GNUnet peers migrate content between
+peers. Content in this sense are individual blocks of a file, not necessarily
+entire files. When peers run out of space (due to local publishing operations 
or
+due to migration of content from other peers), blocks sometimes need to be
+discarded. GNUnet first always discards expired blocks (typically, blocks are
+published with an expiration of about two years in the future; this is another
+option). If there is still not enough space, GNUnet discards the blocks with 
the
+lowest priority. The priority of a block is decided by its popularity (in terms
+of requests from peers we trust) and, in case of blocks published locally, the
+base-priority that was specified by the user when the block was published
+initially.
 
-
-Depending on the peer's configuration, GNUnet peers migrate content between 
peers. Content in this sense are individual blocks of a file, not necessarily 
entire files. When peers run out of space (due to local publishing operations 
or due to migration of content from other peers), blocks sometimes need to be 
discarded. GNUnet first always discards expired blocks (typically, blocks are 
published with an expiration of about two years in the future; this is another 
option). If there is stil [...]
address@hidden Replication
 @c %**end of header
-
 @node Top
 
+When peers migrate content to other systems, the replication level of a block 
is
+used to decide which blocks need to be migrated most urgently. GNUnet will
+always push the block with the highest replication level into the network, and
+then decrement the replication level by one. If all blocks reach replication
+level zero, the selection is simply random.
 
-
-When peers migrate content to other systems, the replication level of a block 
is used to decide which blocks need to be migrated most urgently. GNUnet will 
always push the block with the highest replication level into the network, and 
then decrement the replication level by one. If all blocks reach replication 
level zero, the selection is simply random.
 @settitle File-sharing: Publishing
 @c %**end of header
-
 @node Top
 
-
-
-The command @code{gnunet-publish} can be used to add content to the network.@
- The basic format of the command is 
address@hidden gnunet-publish [-n] [-k KEYWORDS]* [-m TYPE:VALUE] FILENAME 
+The command @code{gnunet-publish} can be used to add content to the network.
+The basic format of the command is
address@hidden
+$ gnunet-publish [-n] [-k KEYWORDS]* [-m TYPE:VALUE] FILENAME 
 @end example
+
 @settitle Important command-line options
 @c %**end of header
-
 @node Top
 
+The option -k is used to specify keywords for the file that should be inserted.
+You can supply any number of keywords, and each of the keywords will be
+sufficient to locate and retrieve the file.
 
+The -m option is used to specify meta-data, such as descriptions. You can use 
-m
+multiple times. The TYPE passed must be from the list of meta-data types known
+to libextractor. You can obtain this list by running @code{extract -L}.
+Use quotes around the entire meta-data argument if the value contains spaces.
+The meta-data is displayed to other users when they select which files to
+download. The meta-data and the keywords are optional and maybe inferred using
+GNU libextractor. 
 
-The option -k is used to specify keywords for the file that should be 
inserted.@
- You can supply any number of keywords, and each of the keywords will be 
sufficient to locate and retrieve the file.
-
-The -m option is used to specify meta-data, such as descriptions. You can use 
-m multiple times. The TYPE passed must be from the list of meta-data types 
known to libextractor. You can obtain this list by running @code{extract -L}.@
- Use quotes around the entire meta-data argument if the value contains spaces.@
- The meta-data is displayed to other users when they select which files to 
download. The meta-data and the keywords are optional and maybe inferred using 
GNU libextractor. 
+gnunet-publish has a few additional options to handle namespaces and
+directories.
+See the man-page for details.
 
- gnunet-publish has a few additional options to handle namespaces and 
directories.@
- See the man-page for details. @settitle Indexing vs. Inserting
address@hidden Indexing vs. Inserting
 @c %**end of header
-
 @node Top
 
+By default, GNUnet indexes a file instead of making a full copy. This is much
+more efficient, but requries the file to stay unaltered at the location where 
it
+was when it was indexed. If you intend to move, delete or alter a file, 
consider
+using the option @code{-n} which will force GNUnet to make a copy of the file 
in
+the database.
 
+Since it is much less efficient, this is strongly discouraged for large files.
+When GNUnet indexes a file (default), GNUnet does @strong{not} create an
+additional encrypted copy of the file but just computes a summary (or index) of
+the file. That summary is approximately two percent of the size of the original
+file and is stored in GNUnet's database. Whenever a request for a part of an
+indexed file reaches GNUnet, this part is encrypted on-demand and send out. 
This
+way, there is no need for an additional encrypted copy of the file to stay
+anywhere on the drive. This is different from other systems, such as Freenet,
+where each file that is put online must be in Freenet's database in encrypted
+format, doubling the space requirements if the user wants to preseve a directly
+accessible copy in plaintext. 
 
- By default, GNUnet indexes a file instead of making a full copy. This is much 
more efficient, but requries the file to stay unaltered at the location where 
it was when it was indexed. If you intend to move, delete or alter a file, 
consider using the option @code{-n} which will force GNUnet to make a copy of 
the file in the database.
-
-Since it is much less efficient, this is strongly discouraged for large files. 
When GNUnet indexes a file (default), GNUnet does @strong{not} create an 
additional encrypted copy of the file but just computes a summary (or index) of 
the file. That summary is approximately two percent of the size of the original 
file and is stored in GNUnet’s database. Whenever a request for a part of an 
indexed file reaches GNUnet, this part is encrypted on-demand and send out. 
This way, there is no nee [...]
+Thus indexing should be used for all files where the user will keep using this
+file (at the location given to gnunet-publish) and does not want to retrieve it
+back from GNUnet each time. If you want to remove a file that you have indexed
+from the local peer, use the tool @code{gnunet-unindex} to un-index the file. 
 
- Thus indexing should be used for all files where the user will keep using 
this file (at the location given to gnunet-publish) and does not want to 
retrieve it back from GNUnet each time. If you want to remove a file that you 
have indexed from the local peer, use the tool @code{gnunet-unindex} to 
un-index the file. 
+The option @code{-n} may be used if the user fears that the file might be found
+on his drive (assuming the computer comes under the control of an adversary).
+When used with the @code{-n} flag, the user has a much better chance of denying
+knowledge of the existence of the file, even if it is still (encrypted) on the
+drive and the adversary is able to crack the encryption (e.g. by guessing the
+keyword. 
 
- The option @code{-n} may be used if the user fears that the file might be 
found on his drive (assuming the computer comes under the control of an 
adversary).@
- When used with the @code{-n} flag, the user has a much better chance of 
denying knowledge of the existence of the file, even if it is still (encrypted) 
on the drive and the adversary is able to crack the encryption (e.g. by 
guessing the keyword. 
 @settitle File-sharing: Searching
 @c %**end of header
-
 @node Top
 
-
-
-The command @code{gnunet-search} can be used to search for content on GNUnet. 
The format is: 
address@hidden gnunet-search [-t TIMEOUT] KEYWORD
+The command @code{gnunet-search} can be used to search for content on GNUnet.
+The format is: 
address@hidden
+$ gnunet-search [-t TIMEOUT] KEYWORD
 @end example
 
+The -t option specifies that the query should timeout after approximately
+TIMEOUT seconds. A value of zero is interpreted as @emph{no timeout}, which is
+also the default. In this case, gnunet-search will never terminate (unless you
+press CTRL-C). 
 
- The -t option specifies that the query should timeout after approximately 
TIMEOUT seconds. A value of zero is interpreted as @emph{no timeout}, which is 
also the default. In this case, gnunet-search will never terminate (unless you 
press CTRL-C). 
-
- If multiple words are passed as keywords, they will all be considered 
optional. Prefix keywords with a "+" to make them mandatory. 
+If multiple words are passed as keywords, they will all be considered optional.
+Prefix keywords with a "+" to make them mandatory. 
 
 Note that searching using
address@hidden gnunet-search Das Kapital
address@hidden
+$ gnunet-search Das Kapital
 @end example
 
-
 is not the same as searching for
address@hidden gnunet-search "Das Kapital"@end example
-
address@hidden
+$ gnunet-search "Das Kapital"
address@hidden example
 
-as the first will match files shared under the keywords "Das" or "Kapital" 
whereas the second will match files shared under the keyword "Das Kapital". 
+as the first will match files shared under the keywords "Das" or "Kapital"
+whereas the second will match files shared under the keyword "Das Kapital". 
 
- Search results are printed by gnunet-search like this: 
address@hidden gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...C92.17992
+Search results are printed by gnunet-search like this: 
address@hidden
+$ gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...C92.17992
 => The GNU Public License <= (mimetype: text/plain)
 @end example
 
 
- The first line is the command you would have to enter to download the file.@
- The argument passed to @code{-o} is the suggested filename (you may change it 
to whatever you like).@
- The @code{--} is followed by key for decrypting the file, the query for 
searching the file, a checksum (in hexadecimal) finally the size of the file in 
bytes.@
- The second line contains the description of the file; here this is "The GNU 
Public License" and the mime-type (see the options for gnunet-publish on how to 
specify these). 
+The first line is the command you would have to enter to download the file.
+The argument passed to @code{-o} is the suggested filename (you may change it 
to
+whatever you like).
+The @code{--} is followed by key for decrypting the file, the query for
+searching the file, a checksum (in hexadecimal) finally the size of the file in
+bytes.
+The second line contains the description of the file; here this is
+"The GNU Public License" and the mime-type (see the options for gnunet-publish
+on how to specify these). 
 
 @settitle File-sharing: Downloading
 @c %**end of header
-
 @node Top
 
-
-
-In order to download a file, you need the three values returned by 
@code{gnunet-search}.@
- You can then use the tool @code{gnunet-download} to obtain the file:
address@hidden gnunet-download -o FILENAME --- GNUNETURL
+In order to download a file, you need the three values returned by
address@hidden
+You can then use the tool @code{gnunet-download} to obtain the file:
address@hidden
+$ gnunet-download -o FILENAME --- GNUNETURL
 @end example
 
-
- FILENAME specifies the name of the file where GNUnet is supposed to write the 
result. Existing files are overwritten. If the existing file contains blocks 
that are identical to the desired download, those blocks will not be downloaded 
again (automatic resume).
+FILENAME specifies the name of the file where GNUnet is supposed to write the
+result. Existing files are overwritten. If the existing file contains blocks
+that are identical to the desired download, those blocks will not be downloaded
+again (automatic resume).
 
 If you want to download the GPL from the previous example, you do the 
following: 
address@hidden gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...92.17992
address@hidden
+$ gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...92.17992
 @end example
 
+If you ever have to abort a download, you can continue it at any time by
+re-issuing @code{gnunet-download} with the same filename. In that case, GNUnet
+will @strong{not} download blocks again that are already present.
 
- If you ever have to abort a download, you can continue it at any time by 
re-issuing @code{gnunet-download} with the same filename. In that case, GNUnet 
will @strong{not} download blocks again that are already present.
-
-GNUnet’s file-encoding mechanism will ensure file integrity, even if the 
existing file was not downloaded from GNUnet in the first place. 
-
- You may want to use the @code{-V} switch (must be added before the @code{--}) 
to turn on verbose reporting. In this case, @code{gnunet-download} will print 
the current number of bytes downloaded whenever new data was received. 
address@hidden @bullet
-
+GNUnet's file-encoding mechanism will ensure file integrity, even if the
+existing file was not downloaded from GNUnet in the first place. 
 
address@hidden
+You may want to use the @code{-V} switch (must be added before the @code{--}) 
to
+turn on verbose reporting. In this case, @code{gnunet-download} will print the
+current number of bytes downloaded whenever new data was received. 
 
-
address@hidden
-Español
address@hidden itemize
 @settitle File-sharing: Directories
 @c %**end of header
-
 @node Top
 
+Directories are shared just like ordinary files. If you download a directory
+with @code{gnunet-download}, you can use @code{gnunet-directory} to list its
+contents. The canonical extension for GNUnet directories when stored as files 
in
+your local file-system is ".gnd". The contents of a directory are URIs and
+meta data.
+The URIs contain all the information required by @code{gnunet-download} to
+retrieve the file. The meta data typically includes the mime-type, description,
+a filename and other meta information, and possibly even the full original file
+(if it was small). 
 
-
- Directories are shared just like ordinary files. If you download a directory 
with @code{gnunet-download}, you can use @code{gnunet-directory} to list its 
contents. The canonical extension for GNUnet directories when stored as files 
in your local file-system is ".gnd". The contents of a directory are URIs and 
meta data.@
- The URIs contain all the information required by @code{gnunet-download} to 
retrieve the file. The meta data typically includes the mime-type, description, 
a filename and other meta information, and possibly even the full original file 
(if it was small). 
 @settitle File-sharing: Namespace Management
 @c %**end of header
-
 @node Top
 
-
-
 THIS TEXT IS OUTDATED AND NEEDS TO BE REWRITTEN FOR 0.10!
 
-The gnunet-pseudonym tool can be used to create pseudonyms and to advertise 
namespaces. By default, gnunet-pseudonym simply lists all locally available 
address@hidden Creating Pseudonyms
address@hidden %**end of header
+The gnunet-pseudonym tool can be used to create pseudonyms and to advertise
+namespaces. By default, gnunet-pseudonym simply lists all locally available
+pseudonyms.
 
address@hidden Creating Pseudonyms
address@hidden %**end of header
 @node Top
 
+With the @code{-C NICK} option it can also be used to create a new pseudonym.
+A pseudonym is the virtual identity of the entity in control of a namespace.
+Anyone can create any number of pseudonyms. Note that creating a pseudonym can
+take a few minutes depending on the performance of the machine used.
 
-
- With the @code{-C NICK} option it can also be used to create a new pseudonym.@
- A pseudonym is the virtual identity of the entity in control of a namespace.@
- Anyone can create any number of pseudonyms. Note that creating a pseudonym 
can take a few minutes depending on the performance of the machine used. 
@settitle Deleting Pseudonyms
address@hidden Deleting Pseudonyms
 @c %**end of header
-
 @node Top
 
+With the @code{-D NICK} option pseudonyms can be deleted. Once the pseudonym 
has
+been deleted it is impossible to add content to the corresponding namespace.
+Deleting the pseudonym does not make the namespace or any content in it
+unavailable.
 
-
- With the @code{-D NICK} option pseudonyms can be deleted. Once the pseudonym 
has been deleted it is impossible to add content to the corresponding 
namespace. Deleting the pseudonym does not make the namespace or any content in 
it unavailable. @settitle Advertising namespaces
address@hidden Advertising namespaces
 @c %**end of header
-
 @node Top
 
+Each namespace is associated with meta-data that describes the namespace.
+This meta data is provided by the user at the time that the namespace is
+advertised. Advertisements are published under keywords so that they can be
+found using normal keyword-searches. This way, users can learn about new
+namespaces without relying on out-of-band communication or directories.
+A suggested keyword to use for all namespaces is simply "namespace".
+When a keyword-search finds a namespace advertisement, it is automatically
+stored in a local list of known namespaces. Users can then associate a rank 
with
+the namespace to remember the quality of the content found in it.
 
-
- Each namespace is associated with meta-data that describes the namespace.@
- This meta data is provided by the user at the time that the namespace is 
advertised. Advertisements are published under keywords so that they can be 
found using normal keyword-searches. This way, users can learn about new 
namespaces without relying on out-of-band communication or directories.@
- A suggested keyword to use for all namespaces is simply "namespace".@
- When a keyword-search finds a namespace advertisement, it is automatically 
stored in a local list of known namespaces. Users can then associate a rank 
with the namespace to remember the quality of the content found in it. 
@settitle Namespace names
address@hidden Namespace names
 @c %**end of header
-
 @node Top
 
+While the namespace is uniquely identified by its ID, another way to refer to
+the namespace is to use the NICKNAME. The NICKNAME can be freely chosen by the
+creator of the namespace and hence conflicts are possible. If a GNUnet client
+learns about more than one namespace using the same NICKNAME, the ID is 
appended
+to the NICKNAME to get a unique identifier.
 
-
- While the namespace is uniquely identified by its ID, another way to refer to 
the namespace is to use the NICKNAME. The NICKNAME can be freely chosen by the 
creator of the namespace and hence conflicts are possible. If a GNUnet client 
learns about more than one namespace using the same NICKNAME, the ID is 
appended to the NICKNAME to get a unique identifier. @settitle Namespace root
address@hidden Namespace root
 @c %**end of header
-
 @node Top
 
+An item of particular interest in the namespace advertisement is the ROOT.
+The ROOT is the identifier of a designated entry in the namespace. The idea is
+that the ROOT can be used to advertise an entry point to the content of the
+namespace. 
 
-
- An item of particular interest in the namespace advertisement is the ROOT.@
- The ROOT is the identifier of a designated entry in the namespace. The idea 
is that the ROOT can be used to advertise an entry point to the content of the 
namespace. 
 @settitle File-Sharing URIs
 @c %**end of header
-
 @node Top
 
+GNUnet (currently) uses four different types of URIs for file-sharing. They all
+begin with "gnunet://fs/". This section describes the four different URI types
+in detail.
 
-
-GNUnet (currently) uses four different types of URIs for file-sharing. They 
all begin with "gnunet://fs/". This section describes the four different URI 
types in address@hidden Encoding of hash values in URIs
address@hidden Encoding of hash values in URIs
 @c %**end of header
-
 @node Top
 
+Most URIs include some hash values. Hashes are encoded using base32hex
+(RFC 2938).
 
-
-Most URIs include some hash values. Hashes are encoded using base32hex (RFC 
2938)address@hidden Content Hash Key (chk)
address@hidden Content Hash Key (chk)
 @c %**end of header
-
 @node Top
 
+A chk-URI is used to (uniquely) identify a file or directory and to allow peers
+to download the file. Files are stored in GNUnet as a tree of encrypted blocks.
+The chk-URI thus contains the information to download and decrypt those blocks.
+A chk-URI has the format "gnunet://fs/chk/KEYHASH.QUERYHASH.SIZE". Here, "SIZE"
+is the size of the file (which allows a peer to determine the shape of the
+tree), KEYHASH is the key used to decrypt the file (also the hash of the
+plaintext of the top block) and QUERYHASH is the query used to request the
+top-level block (also the hash of the encrypted block).
 
-
-A chk-URI is used to (uniquely) identify a file or directory and to allow 
peers to download the file. Files are stored in GNUnet as a tree of encrypted 
blocks. The chk-URI thus contains the information to download and decrypt those 
blocks. A chk-URI has the format "gnunet://fs/chk/KEYHASH.QUERYHASH.SIZE". 
Here, "SIZE" is the size of the file (which allows a peer to determine the 
shape of the tree), KEYHASH is the key used to decrypt the file (also the hash 
of the plaintext of the top blo [...]
address@hidden Location identifiers (loc)
 @c %**end of header
-
 @node Top
 
+For non-anonymous file-sharing, loc-URIs are used to specify which peer is
+offering the data (in addition to specifying all of the data from a chk-URI).
+Location identifiers include a digital signature of the peer to affirm that the
+peer is truly the origin of the data. The format is
+"gnunet://fs/loc/KEYHASH.QUERYHASH.SIZE.PEER.SIG.EXPTIME". Here, "PEER" is the
+public key of the peer (in GNUnet format in base32hex), SIG is the RSA 
signature
+(in GNUnet format in base32hex) and EXPTIME specifies when the signature 
expires
+(in milliseconds after 1970).
 
-
-For non-anonymous file-sharing, loc-URIs are used to specify which peer is 
offering the data (in addition to specifying all of the data from a chk-URI). 
Location identifiers include a digital signature of the peer to affirm that the 
peer is truly the origin of the data. The format is 
"gnunet://fs/loc/KEYHASH.QUERYHASH.SIZE.PEER.SIG.EXPTIME". Here, "PEER" is the 
public key of the peer (in GNUnet format in base32hex), SIG is the RSA 
signature (in GNUnet format in base32hex) and EXPTIME spe [...]
address@hidden Keyword queries (ksk)
 @c %**end of header
-
 @node Top
 
+A keyword-URI is used to specify that the desired operation is the search using
+a particular keyword. The format is simply "gnunet://fs/ksk/KEYWORD". Non-ASCII
+characters can be specified using the typical URI-encoding (using hex values)
+from HTTP. "+" can be used to specify multiple keywords (which are then
+logically "OR"-ed in the search, results matching both keywords are given a
+higher rank): "gnunet://fs/ksk/KEYWORD1+KEYWORD2".
 
-
-A keyword-URI is used to specify that the desired operation is the search 
using a particular keyword. The format is simply "gnunet://fs/ksk/KEYWORD". 
Non-ASCII characters can be specified using the typical URI-encoding (using hex 
values) from HTTP. "+" can be used to specify multiple keywords (which are then 
logically "OR"-ed in the search, results matching both keywords are given a 
higher rank): "gnunet://fs/ksk/KEYWORD1+KEYWORD2"address@hidden Namespace 
content (sks)
address@hidden Namespace content (sks)
 @c %**end of header
-
 @node Top
 
+Namespaces are sets of files that have been approved by some (usually
+pseudonymous) user --- typically by that user publishing all of the files
+together. A file can be in many namespaces. A file is in a namespace if the
+owner of the ego (aka the namespace's private key) signs the CHK of the file
+cryptographically. An SKS-URI is used to search a namespace. The result is a
+block containing meta data, the CHK and the namespace owner's signature. The
+format of a sks-URI is "gnunet://fs/sks/NAMESPACE/IDENTIFIER". Here, 
"NAMESPACE"
+is the public key for the namespace. "IDENTIFIER" is a freely chosen keyword
+(or password!). A commonly used identifier is "root" which by convention refers
+to some kind of index or other entry point into the namespace.
 
-
-Namespaces are sets of files that have been approved by some (usually 
pseudonymous) user --- typically by that user publishing all of the files 
together. A file can be in many namespaces. A file is in a namespace if the 
owner of the ego (aka the namespace's private key) signs the CHK of the file 
cryptographically. An SKS-URI is used to search a namespace. The result is a 
block containing meta data, the CHK and the namespace owner's signature. The 
format of a sks-URI is "gnunet://fs/sks/N [...]
address@hidden @bullet
-
-
address@hidden
-
address@hidden itemize
 @settitle GNS Configuration
 @c %**end of header
-
 @node Top
 
 @settitle DNS Services Configuration
 @c %**end of header
-
 @node Top
 
+This creates new hostnames in the form "example.gnu". The "example" is filled 
in
+the first column, the others describe a mapping to a service.
 
+The special strings "localhost4" and "localhost6" are expanded to the IPv4 and
+IPv6 address of the exit interface respectively.
 
-This creates new hostnames in the form "example.gnu". The "example" is filled 
in the first column, the others describe a mapping to a service.@
- The special strings "localhost4" and "localhost6" are expanded to the IPv4 
and IPv6 address of the exit interface respectively.
address@hidden @bullet
-
-
address@hidden
-
address@hidden itemize
 @settitle The GNU Name System
 @c %**end of header
-
 @node Top
 
-
-
-The GNU Name System (GNS) is secure and decentralized naming system.@
- It allows its users to resolve and register names within the @code{.gnu} 
top-level domain (TLD).
+The GNU Name System (GNS) is secure and decentralized naming system.
+It allows its users to resolve and register names within the @code{.gnu}
+top-level domain (TLD).
 
 GNS is designed to provide:
 @itemize @bullet
-
-
address@hidden
-Censorship resistance
-
address@hidden
-Query privacy
-
address@hidden
-Secure name resolution
-
address@hidden
-Compatibility with DNS
address@hidden Censorship resistance
address@hidden Query privacy
address@hidden Secure name resolution
address@hidden Compatibility with DNS
 @end itemize
 
+For the initial configuration and population of your GNS installation, please
+follow the GNS setup instructions. The remainder of this chapter will provide
+some background on GNS and then describe how to use GNS in more detail.
 
-For the initial configuration and population of your GNS installation, please 
follow the GNS setup instructions. The remainder of this chapter will provide 
some background on GNS and then describe how to use GNS in more detail.
+Unlike DNS, GNS does not rely on central root zones or authorities. Instead any
+user administers his own root and can can create arbitrary name value mappings.
+Furthermore users can delegate resolution to other users' zones just like DNS 
NS
+records do. Zones are uniquely identified via public keys and resource records
+are signed using the corresponding public key. Delegation to another user's 
zone
+is done using special PKEY records and petnames. A petname is a name that can 
be
+freely chosen by the user. This results in non-unique name-value mappings as
address@hidden@uref{http://www.bob.gnu/, www.bob.gnu}} to one user might be
address@hidden@uref{http://www.friend.gnu/, www.friend.gnu}} for someone else.
 
-Unlike DNS, GNS does not rely on central root zones or authorities. Instead 
any user administers his own root and can can create arbitrary name value 
mappings. Furthermore users can delegate resolution to other users' zones just 
like DNS NS records do. Zones are uniquely identified via public keys and 
resource records are signed using the corresponding public key. Delegation to 
another user's zone is done using special PKEY records and petnames. A petname 
is a name that can be freely cho [...]
 @settitle Maintaining your own Zones
 @c %**end of header
-
 @node Top
 
-
-
 To setup you GNS system you must execute:@
address@hidden@
- $ gnunet-gns-import.sh@
-}
-
-This will boostrap your zones and create the necessary key material.@
- Your keys can be listed using the gnunet-identity command line tool:@
address@hidden@
- $ gnunet-identity -d@
-}@
- You can arbitrarily create your own zones using the gnunet-identity tool 
using:@
address@hidden@
- $ gnunet-identity -C "new_zone"@
-}
-
-Now you can add (or edit, or remove) records in your GNS zone using the 
gnunet-setup GUI or using the gnunet-namestore command-line tool. In either 
case, your records will be stored in an SQL database under control of the 
gnunet-service-namestore. Note that if mutliple users use one peer, the 
namestore database will include the combined records of all users. However, 
users will not be able to see each other's records if they are marked as 
private.
address@hidden gnunet-gns-import.sh}
+
+This will boostrap your zones and create the necessary key material.
+Your keys can be listed using the gnunet-identity command line tool:@
address@hidden gnunet-identity -d}@
+You can arbitrarily create your own zones using the gnunet-identity tool 
using:@
address@hidden gnunet-identity -C "new_zone"}@
+
+Now you can add (or edit, or remove) records in your GNS zone using the
+gnunet-setup GUI or using the gnunet-namestore command-line tool. In either
+case, your records will be stored in an SQL database under control of the
+gnunet-service-namestore. Note that if mutliple users use one peer, the
+namestore database will include the combined records of all users. However,
+users will not be able to see each other's records if they are marked as
+private.
+
+To provide a simple example for editing your own zone, suppose you have your 
own
+web server with IP 1.2.3.4. Then you can put an A record (A records in DNS are
+for IPv4 IP addresses) into your local zone using the command:@
address@hidden gnunet-namestore -z master-zone -a -n www -t A -V 1.2.3.4 -e 
never}@
+Afterwards, you will be able to access your webpage under "www.gnu" (assuming
+your webserver does not use virtual hosting, if it does, please read up on
+setting up the GNS proxy).
+
+Similar commands will work for other types of DNS and GNS records, the syntax
+largely depending on the type of the record. Naturally, most users may find
+editing the zones using the gnunet-setup GUI to be easier.
 
-To provide a simple example for editing your own zone, suppose you have your 
own web server with IP 1.2.3.4. Then you can put an A record (A records in DNS 
are for IPv4 IP addresses) into your local zone using the command:@
address@hidden@
- $ gnunet-namestore -z master-zone -a -n www -t A -V 1.2.3.4 -e never@
-}@
- Afterwards, you will be able to access your webpage under "www.gnu"(assuming 
your webserver does not use virtual hosting, if it does, please read up on 
setting up the GNS proxy).
-
-Similar commands will work for other types of DNS and GNS records, the syntax 
largely depending on the type of the record. Naturally, most users may find 
editing the zones using the gnunet-setup GUI to be easier.
 @settitle Obtaining your Zone Key
 @c %**end of header
-
 @node Top
 
-
-
-Each zone in GNS has a public-private key. Usually, gnunet-namestore and 
gnunet-setup will access your private key as necessary, so you do not have to 
worry about those. What is important is your public key (or rather, the hash of 
your public key), as you will likely want to give it to others so that they can 
securely link to you.
+Each zone in GNS has a public-private key. Usually, gnunet-namestore and
+gnunet-setup will access your private key as necessary, so you do not have to
+worry about those. What is important is your public key (or rather, the hash of
+your public key), as you will likely want to give it to others so that they can
+securely link to you.
 
 You can usually get the hash of your public key using@
address@hidden@
- $ gnunet-identity -d $options | grep master-zone | awk '@{print 
address@hidden'@
-}@
- For example, the output might be something like@
- DC3SEECJORPHQNVRH965A6N74B1M37S721IG4RBQ15PJLLPJKUE0.
address@hidden gnunet-identity -d $options | grep master-zone | awk '@{print 
address@hidden'}@
+For example, the output might be something like@
+DC3SEECJORPHQNVRH965A6N74B1M37S721IG4RBQ15PJLLPJKUE0.
+
+Alternatively, you can obtain a QR code with your zone key AND your pseudonym
+from gnunet-gtk. The QR code is displayed in the GNS tab and can be stored to
+disk using the Save as button next to the image.
 
-Alternatively, you can obtain a QR code with your zone key AND your pseudonym 
from gnunet-gtk. The QR code is displayed in the GNS tab and can be stored to 
disk using the Save as button next to the image.
 @settitle Adding Links to Other Zones
 @c %**end of header
-
 @node Top
 
+A central operation in GNS is the ability to securely delegate to other zones.
+Basically, by adding a delegation you make all of the names from the other zone
+available to yourself. This section describes how to create delegations.
 
+Suppose you have a friend who you call 'bob' who also uses GNS. You can then
+delegate resolution of names to Bob's zone by adding a PKEY record to his local
+zone:@
address@hidden gnunet-namestore -a -n bob --type PKEY -V XXXX -e never}@
+Note that XXXX in the command above must be replaced with the hash of Bob's
+public key (the output your friend obtained using the gnunet-identity command
+from the previous section and told you, for example by giving you a business
+card containing this information as a QR code).
 
-A central operation in GNS is the ability to securely delegate to other zones. 
Basically, by adding a delegation you make all of the names from the other zone 
available to yourself. This section describes how to create delegations.
+Assuming Bob has an A record for his website under the name of www in his zone,
+you can then access Bob's website under www.bob.gnu --- as well as any (public)
+GNS record that Bob has in his zone by replacing www with the respective name 
of
+the record in Bob's zone. 
 
-Suppose you have a friend who you call 'bob' who also uses GNS. You can then 
delegate resolution of names to Bob's zone by adding a PKEY record to his local 
zone:@
address@hidden@
- $ gnunet-namestore -a -n bob --type PKEY -V XXXX -e never@
-}@
- Note that XXXX in the command above must be replaced with the hash of Bob's 
public key (the output your friend obtained using the gnunet-identity command 
from the previous section and told you, for example by giving you a business 
card containing this information as a QR code).
+Furthermore, if Bob has himself a (public) delegation to Carol's zone under
+"carol", you can access Carol's records under NAME.carol.bob.gnu (where NAME is
+the name of Carol's record you want to access).
 
-Assuming Bob has an A record for his website under the name of www in his 
zone, you can then access Bob's website under www.bob.gnu --- as well as any 
(public) GNS record that Bob has in his zone by replacing www with the 
respective name of the record in Bob's zone. 
-
-Furthermore, if Bob has himself a (public) delegation to Carol's zone under 
"carol", you can access Carol's records under NAME.carol.bob.gnu (where NAME is 
the name of Carol's record you want to access).
 @settitle The Three Local Zones of GNS
 @c %**end of header
-
 @node Top
 
-
-
-Each user GNS has control over three zones. Each of the zones has a different 
purpose. These zones are the
+Each user GNS has control over three zones. Each of the zones has a different
+purpose. These zones are the
 @itemize @bullet
 
-
 @item
 master zone,
-
 @item
 private zone, and the
-
 @item
 shorten zone.
 @end itemize
+
 @settitle The Master Zone
 @c %**end of header
-
 @node Top
 
+The master zone is your personal TLD. Names within the @code{.gnu} namespace 
are
+resolved relative to this zone. You can arbitrarily add records to this zone 
and
+selectively publish those records.
 
-
-The master zone is your personal TLD. Names within the @code{.gnu} namespace 
are resolved relative to this zone. You can arbitrarily add records to this 
zone and selectively publish those address@hidden The Private Zone
address@hidden The Private Zone
 @c %**end of header
-
 @node Top
 
+The private zone is a subzone (or subdomain in DNS terms) of your master zone.
+It should be used for records that you want to keep private. For example
address@hidden The key idea is that you want to keep your private
+records separate, if just to know that those names are not available to other
+users.
 
-
-The private zone is a subzone (or subdomain in DNS terms) of your master zone. 
It should be used for records that you want to keep private. For example 
@code{bank.private.gnu}. The key idea is that you want to keep your private 
records separate, if just to know that those names are not available to other 
address@hidden The Shorten Zone
address@hidden The Shorten Zone
 @c %**end of header
-
 @node Top
 
+The shorten zone can either be a subzone of the master zone or the private 
zone.
+It is different from the other zones in that GNS will automatically populate
+this zone with other users' zones based on their PSEU records whenever you
+resolve a name.
 
+For example if you go to
address@hidden@uref{http://www.bob.alice.dave.gnu/, www.bob.alice.dave.gnu}}, 
GNS will
+try to import @code{bob} into your shorten zone. Having obtained Bob's PKEY 
from
address@hidden, GNS will lookup the PSEU record for @code{+} in Bob's
+zone. If it exists and the specified pseudonym is not taken, Bob's PKEY will be
+automatically added under that pseudonym (i.e. "bob") into your shorten zone.
+From then on, Bob's webpage will also be available for you as
address@hidden@uref{http://www.bob.short.gnu/, www.bob.short.gnu}}. This 
feature is
+called automatic name shortening and is supposed to keep GNS names as short and
+memorable as possible.
 
-The shorten zone can either be a subzone of the master zone or the private 
zone. It is different from the other zones in that GNS will automatically 
populate this zone with other users' zones based on their PSEU records whenever 
you resolve a name.
-
-For example if you go to @address@hidden://www.bob.alice.dave.gnu/, 
www.bob.alice.dave.gnu}}, GNS will try to import @code{bob} into your shorten 
zone. Having obtained Bob's PKEY from @code{alice.dave.gnu}, GNS will lookup 
the PSEU record for @code{+} in Bob's zone. If it exists and the specified 
pseudonym is not taken, Bob's PKEY will be automatically added under that 
pseudonym (i.e. "bob") into your shorten zone. From then on, Bob's webpage will 
also be available for you as @address@hidden [...]
 @settitle The ZKEY Top Level Domain in GNS
 @c %**end of header
-
 @node Top
 
+GNS also provides a secure and globally unique namespace under the .zkey
+top-level domain. A name in the .zkey TLD corresponds to the (printable) public
+key of a zone. Names in the .zkey TLD are then resolved by querying the
+respective zone. The .zkey TLD is expected to be used under rare circumstances
+where globally unique names are required and for integration with legacy
+systems.
 
-
-GNS also provides a secure and globally unique namespace under the .zkey 
top-level domain. A name in the .zkey TLD corresponds to the (printable) public 
key of a zone. Names in the .zkey TLD are then resolved by querying the 
respective zone. The .zkey TLD is expected to be used under rare circumstances 
where globally unique names are required and for integration with legacy 
systems.
 @settitle Resource Records in GNS
 @c %**end of header
-
 @node Top
 
+GNS supports the majority of the DNS records as defined in
address@hidden://www.ietf.org/rfc/rfc1035.txt, RFC 1035}. Additionally, GNS 
defines
+some new record types the are unique to the GNS system. For example,
+GNS-specific resource records are use to give petnames for zone delegation,
+revoke zone keys and provide some compatibility features.
 
+For some DNS records, GNS does extended processing to increase their usefulness
+in GNS. In particular, GNS introduces special names referred to as
+"zone relative names". Zone relative names are allowed in some resource record
+types (for example, in NS and CNAME records) and can also be used in links on
+webpages. Zone relative names end in ".+" which indicates that the name needs 
to
+be resolved relative to the current authoritative zone. The extended processing
+of those names will expand the ".+" with the correct delegation chain to the
+authoritative zone (replacing ".+" with the name of the location where the name
+was encountered) and hence generate a valid @code{.gnu} name. 
 
-GNS supports the majority of the DNS records as defined in 
@uref{http://www.ietf.org/rfc/rfc1035.txt, RFC 1035}. Additionally, GNS defines 
some new record types the are unique to the GNS system. For example, 
GNS-specific resource records are use to give petnames for zone delegation, 
revoke zone keys and provide some compatibility features.
+GNS currently supports the following record types:
 
-For some DNS records, GNS does extended processing to increase their 
usefulness in GNS. In particular, GNS introduces special names referred to as 
"zone relative names". Zone relative names are allowed in some resource record 
types (for example, in NS and CNAME records) and can also be used in links on 
webpages. Zone relative names end in ".+" which indicates that the name needs 
to be resolved relative to the current authoritative zone. The extended 
processing of those names will expand  [...]
-
-GNS currently supports the following record types:@settitle NICK
address@hidden NICK
 @c %**end of header
-
 @node Top
 
+A NICK record is used to give a zone a name. With a NICK record, you can
+essentially specify how you would like to be called. GNS expects this record
+under the name "+" in the zone's database (NAMESTORE); however, it will then
+automatically be copied into each record set, so that clients never need to do 
a
+separate lookup to discover the NICK record.
 
-
-A NICK record is used to give a zone a name. With a NICK record, you can 
essentially specify how you would like to be called. GNS expects this record 
under the name "+" in the zone's database (NAMESTORE); however, it will then 
automatically be copied into each record set, so that clients never need to do 
a separate lookup to discover the NICK address@hidden Example
address@hidden Example
 @c %**end of header
-
 @node Top
 
-
-
 Name: +; RRType: NICK; Value: bob
 
-This record in Bob's zone will tell other users that this zone wants to be 
referred to as 'bob'. Note that nobody is obliged to call Bob's zone 'bob' in 
their own zones. It can be seen as a recommendation ("Please call me 
'bob'")address@hidden PKEY
address@hidden %**end of header
+This record in Bob's zone will tell other users that this zone wants to be
+referred to as 'bob'. Note that nobody is obliged to call Bob's zone 'bob' in
+their own zones. It can be seen as a recommendation ("Please call me 'bob'").
 
address@hidden PKEY
address@hidden %**end of header
 @node Top
 
+PKEY records are used to add delegation to other users' zones and give those
+zones a petname.
 
-
-PKEY records are used to add delegation to other users' zones and give those 
zones a address@hidden Example
address@hidden Example
 @c %**end of header
-
 @node Top
 
-
-
-Let Bob's zone be identified by the hash "ABC012". Bob is your friend so you 
want to give him the petname "friend". Then you add the following record to 
your zone:
+Let Bob's zone be identified by the hash "ABC012". Bob is your friend so you
+want to give him the petname "friend". Then you add the following record to 
your
+zone:
 
 Name: friend; RRType: PKEY; Value: ABC012;
 
-This will allow you to resolve records in bob's zone under 
"*.friend.gnu"address@hidden BOX
address@hidden %**end of header
+This will allow you to resolve records in bob's zone under "*.friend.gnu".
 
address@hidden BOX
address@hidden %**end of header
 @node Top
 
+BOX records are there to integrate information from TLSA or SRV records under
+the main label. In DNS, TLSA and SRV records use special names of the form
address@hidden(label.)*tld} to indicate the port number and protocol
+(i.e. tcp or udp) for which the TLSA or SRV record is valid. This causes 
various
+problems, and is elegantly solved in GNS by integrating the protocol and port
+numbers together with the respective value into a "BOX" record. Note that in 
the
+GUI, you do not get to edit BOX records directly right now --- the GUI will
+provide the illusion of directly editing the TLSA and SRV records, even though
+they internally are BOXed up.
 
-
-BOX records are there to integrate information from TLSA or SRV records under 
the main label. In DNS, TLSA and SRV records use special names of the form 
@code{_port._proto.(label.)*tld} to indicate the port number and protocol (i.e. 
tcp or udp) for which the TLSA or SRV record is valid. This causes various 
problems, and is elegantly solved in GNS by integrating the protocol and port 
numbers together with the respective value into a "BOX" record. Note that in 
the GUI, you do not get to ed [...]
address@hidden LEHO
 @c %**end of header
-
 @node Top
 
+The LEgacy HOstname of a server. Some webservers expect a specific hostname to
+provide a service (virtiual hosting). Also SSL certificates usually contain DNS
+names. To provide the expected legacy DNS name for a server, the LEHO record 
can
+be used. To mitigate the just mentioned issues the GNS proxy has to be used. 
The
+GNS proxy will use the LEHO information to apply the necessary transformations.
 
-
-The LEgacy HOstname of a server. Some webservers expect a specific hostname to 
provide a service (virtiual hosting). Also SSL certificates usually contain DNS 
names. To provide the expected legacy DNS name for a server, the LEHO record 
can be used. To mitigate the just mentioned issues the GNS proxy has to be 
used. The GNS proxy will use the LEHO information to apply the necessary 
address@hidden VPN
address@hidden VPN
 @c %**end of header
-
 @node Top
 
+GNS allows easy access to services provided by the GNUnet Virtual Public
+Network. When the GNS resolver encounters a VPN record it will contact the VPN
+service to try and allocate an IPv4/v6 address (if the queries record type is 
an
+IP address) that can be used to contact the service.
 
-
-GNS allows easy access to services provided by the GNUnet Virtual Public 
Network. When the GNS resolver encounters a VPN record it will contact the VPN 
service to try and allocate an IPv4/v6 address (if the queries record type is 
an IP address) that can be used to contact the address@hidden Example
address@hidden Example
 @c %**end of header
-
 @node Top
 
+I want to provide access to the VPN service "web.gnu." on port 80 on peer
+ABC012:@
+Name: www; RRType: VPN; Value: 80 ABC012 web.gnu.
 
-
-I want to provide access to the VPN service "web.gnu." on port 80 on peer 
ABC012:@
- Name: www; RRType: VPN; Value: 80 ABC012 web.gnu.
-
-The peer ABC012 is configured to provide an exit point for the service 
"web.gnu." on port 80 to it's server running locally on port 8080 by having the 
following lines in the @code{gnunet.conf} configuration file:@
+The peer ABC012 is configured to provide an exit point for the service
+"web.gnu." on port 80 to it's server running locally on port 8080 by having the
+following lines in the @code{gnunet.conf} configuration file:@
 @code{@
  [web.gnunet.]@
  TCP_REDIRECTS = 80:localhost4:8080@
address@hidden A, AAAA and TXT
address@hidden %**end of header
+}
 
address@hidden A, AAAA and TXT
address@hidden %**end of header
 @node Top
 
+Those records work in exactly the same fashion as in traditional DNS.
 
-
-Those records work in exactly the same fashion as in traditional 
address@hidden CNAME
address@hidden CNAME
 @c %**end of header
-
 @node Top
 
-
-
-As specified in RFC 1035 whenever a CNAME is encountered the query needs to be 
restarted with the specified name. In GNS a CNAME can either be:
+As specified in RFC 1035 whenever a CNAME is encountered the query needs to be
+restarted with the specified name. In GNS a CNAME can either be:
 @itemize @bullet
-
-
 @item
 A zone relative name,
-
 @item
 A zkey name or
-
 @item
 A DNS name (in which case resolution will continue outside of GNS with the 
systems DNS resolver)
 @end itemize
+
 @settitle GNS2DNS
 @c %**end of header
-
 @node Top
 
+GNS can delegate authority to a legacy DNS zone. For this, the name of the DNS
+nameserver and the name of the DNS zone are specified in a GNS2DNS record.
 
-
-GNS can delegate authority to a legacy DNS zone. For this, the name of the DNS 
nameserver and the name of the DNS zone are specified in a GNS2DNS record. 
@settitle Example
address@hidden Example
 @c %**end of header
-
 @node Top
 
-
-
 Name: pet; RRType: GNS2DNS; Value: gnunet.org@@a.ns.joker.com
 
-Any query to @code{pet.gnu} will then be delegated to the DNS server at 
@code{a.ns.joker.com}.@
- For example, @address@hidden://www.pet.gnu/, www.pet.gnu}} will result in a 
DNS query for @address@hidden://www.gnunet.org/, www.gnunet.org}} to the server 
at @code{a.ns.joker.com}. Delegation to DNS via NS records in GNS can be useful 
if you do not want to start resolution in the DNS root zone (due to issues such 
as censorship or availability).
+Any query to @code{pet.gnu} will then be delegated to the DNS server at
address@hidden@
+For example, @address@hidden://www.pet.gnu/, www.pet.gnu}} will result in a
+DNS query for @address@hidden://www.gnunet.org/, www.gnunet.org}} to the server
+at @code{a.ns.joker.com}. Delegation to DNS via NS records in GNS can be useful
+if you do not want to start resolution in the DNS root zone (due to issues such
+as censorship or availability).
 
-Note that you would typically want to use a relative name for the nameserver, 
i.e.@
- Name: pet; RRType: GNS2DNS; Value: gnunet.org@@ns-joker.+@
- Name: ns-joker; RRType: A; Value: 184.172.157.218
+Note that you would typically want to use a relative name for the nameserver,
+i.e.@
+Name: pet; RRType: GNS2DNS; Value: gnunet.org@@ns-joker.+@
+Name: ns-joker; RRType: A; Value: 184.172.157.218
 
-This way, you can avoid involving the DNS hierarchy in the resolution of 
@code{a.ns.joker.com}. In the example above, the problem may not be obvious as 
the nameserver for "gnunet.org" is in the ".com" zone. However, imagine the 
nameserver was "ns.gnunet.org". In this case, delegating to "ns.gnunet.org" 
would mean that despite using GNS, censorship in the DNS ".org" zone would 
still be address@hidden SOA, SRV, PTR and MX
address@hidden %**end of header
+This way, you can avoid involving the DNS hierarchy in the resolution of
address@hidden In the example above, the problem may not be obvious as
+the nameserver for "gnunet.org" is in the ".com" zone. However, imagine the
+nameserver was "ns.gnunet.org". In this case, delegating to "ns.gnunet.org"
+would mean that despite using GNS, censorship in the DNS ".org" zone would 
still
+be effective.
 
address@hidden SOA, SRV, PTR and MX
address@hidden %**end of header
 @node Top
 
-
-
 The domain names in those records can, again, be either
 @itemize @bullet
-
-
 @item
 A zone relative name,
-
 @item
 A zkey name or
-
 @item
 A DNS name
 @end itemize
 
+The resolver will expand the zone relative name if possible. Note that when
+using MX records within GNS, the target mail server might still refuse to 
accept
+e-mails to the resulting domain as the name might not match. GNS-enabled mail
+clients should use the ZKEY zone as the destination hostname and GNS-enabled
+mail servers should be configured to accept e-mails to the ZKEY-zones of all
+local users.
 
-The resolver will expand the zone relative name if possible. Note that when 
using MX records within GNS, the target mail server might still refuse to 
accept e-mails to the resulting domain as the name might not match. GNS-enabled 
mail clients should use the ZKEY zone as the destination hostname and 
GNS-enabled mail servers should be configured to accept e-mails to the 
ZKEY-zones of all local users.
 @settitle The Virtual Public Network
 @c %**end of header
-
 @node Top
 
+Using the GNUnet Virtual Public Network (VPN) application you can tunnel IP
+traffic over GNUnet. Moreover, the VPN comes with built-in protocol translation
+and DNS-ALG support, enabling IPv4-to-IPv6 protocol translation
+(in both directions). This chapter documents how to use the GNUnet VPN.
 
+The first thing to note about the GNUnet VPN is that it is a public network. 
All
+participating peers can participate and there is no secret key to control
+access. So unlike common virtual private networks, the GNUnet VPN is not useful
+as a means to provide a "private" network abstraction over the Internet. The
+GNUnet VPN is a virtual network in the sense that it is an overlay over the
+Internet, using its own routing mechanisms and can also use an internal
+addressing scheme. The GNUnet VPN is an Internet underlay --- TCP/IP
+applications run on top of it.
 
-Using the GNUnet Virtual Public Network (VPN) application you can tunnel IP 
traffic over GNUnet. Moreover, the VPN comes with built-in protocol translation 
and DNS-ALG support, enabling IPv4-to-IPv6 protocol translation (in both 
directions). This chapter documents how to use the GNUnet VPN.
-
-The first thing to note about the GNUnet VPN is that it is a public network. 
All participating peers can participate and there is no secret key to control 
access. So unlike common virtual private networks, the GNUnet VPN is not useful 
as a means to provide a "private" network abstraction over the Internet. The 
GNUnet VPN is a virtual network in the sense that it is an overlay over the 
Internet, using its own routing mechanisms and can also use an internal 
addressing scheme. The GNUnet VP [...]
+The VPN is currently only supported on GNU/Linux systems. Support for operating
+systems that support TUN (such as FreeBSD) should be easy to add (or might not
+even require any coding at all --- we just did not test this so far). Support
+for other operating systems would require re-writing the code to create virtual
+network interfaces and to intercept DNS requests.
 
-The VPN is currently only supported on GNU/Linux systems. Support for 
operating systems that support TUN (such as FreeBSD) should be easy to add (or 
might not even require any coding at all --- we just did not test this so far). 
Support for other operating systems would require re-writing the code to create 
virtual network interfaces and to intercept DNS requests.
+The VPN does not provide good anonymity. While requests are routed over the
+GNUnet network, other peers can directly see the source and destination of each
+(encapsulated) IP packet. Finally, if you use the VPN to access Internet
+services, the peer sending the request to the Internet will be able to observe
+and even alter the IP traffic. We will discuss additional security implications
+of using the VPN later in this chapter.
 
-The VPN does not provide good anonymity. While requests are routed over the 
GNUnet network, other peers can directly see the source and destination of each 
(encapsulated) IP packet. Finally, if you use the VPN to access Internet 
services, the peer sending the request to the Internet will be able to observe 
and even alter the IP traffic. We will discuss additional security implications 
of using the VPN later in this chapter.
 @settitle Setting up an Exit node
 @c %**end of header
-
 @node Top
 
+Any useful operation with the VPN requires the existence of an exit node in the
+GNUnet Peer-to-Peer network. Exit functionality can only be enabled on peers
+that have regular Internet access. If you want to play around with the VPN or
+support the network, we encourage you to setup exit nodes. This chapter
+documents how to setup an exit node.
 
-
-Any useful operation with the VPN requires the existence of an exit node in 
the GNUnet Peer-to-Peer network. Exit functionality can only be enabled on 
peers that have regular Internet access. If you want to play around with the 
VPN or support the network, we encourage you to setup exit nodes. This chapter 
documents how to setup an exit node.
-
-There are four types of exit functions an exit node can provide, and using the 
GNUnet VPN to access the Internet will only work nicely if the first three 
types are provided somewhere in the network. The four exit functions are:
+There are four types of exit functions an exit node can provide, and using the
+GNUnet VPN to access the Internet will only work nicely if the first three 
types
+are provided somewhere in the network. The four exit functions are:
 @itemize @bullet
-
-
 @item
 DNS: allow other peers to use your DNS resolver
-
 @item
 IPv4: allow other peers to access your IPv4 Internet connection
-
 @item
 IPv6: allow other peers to access your IPv6 Internet connection
-
 @item
 Local service: allow other peers to access a specific TCP or UDP service your 
peer is providing
 @end itemize
 
+By enabling "exit" in gnunet-setup and checking the respective boxes in the
+"exit" tab, you can easily choose which of the above exit functions you want to
+support.
+
+Note, however, that by supporting the first three functions you will allow
+arbitrary other GNUnet users to access the Internet via your system. This is
+somewhat similar to running a Tor exit node. The torproject has a nice article
+about what to consider if you want to do this here. We believe that generally
+running a DNS exit node is completely harmless.
+
+The exit node configuration does currently not allow you to restrict the
+Internet traffic that leaves your system. In particular, you cannot exclude 
SMTP
+traffic (or block port 25) or limit to HTTP traffic using the GNUnet
+configuration. However, you can use your host firewall to restrict outbound
+connections from the virtual tunnel interface. This is highly recommended. In
+the future, we plan to offer a wider range of configuration options for exit
+nodes.
+
+Note that by running an exit node GNUnet will configure your kernel to perform
+IP-forwarding (for IPv6) and NAT (for IPv4) so that the traffic from the 
virtual
+interface can be routed to the Internet. In order to provide an IPv6-exit, you
+need to have a subnet routed to your host's external network interface and
+assign a subrange of that subnet to the GNUnet exit's TUN interface.
+
+When running a local service, you should make sure that the local service is
+(also) bound to the IP address of your EXIT interface (i.e. 169.254.86.1). It
+will NOT work if your local service is just bound to loopback. You may also 
want
+to create a "VPN" record in your zone of the GNU Name System to make it easy 
for
+others to access your service via a name instead of just the full service
+descriptor. Note that the identifier you assign the service can serve as a
+passphrase or shared secret, clients connecting to the service must somehow
+learn the service's name. VPN records in the GNU Name System can make this
+easier.
 
-By enabling "exit" in gnunet-setup and checking the respective boxes in the 
"exit" tab, you can easily choose which of the above exit functions you want to 
support.
-
-Note, however, that by supporting the first three functions you will allow 
arbitrary other GNUnet users to access the Internet via your system. This is 
somewhat similar to running a Tor exit node. The Tor project has a nice article 
about what to consider if you want to do this here. We believe that generally 
running a DNS exit node is completely harmless.
-
-The exit node configuration does currently not allow you to restrict the 
Internet traffic that leaves your system. In particular, you cannot exclude 
SMTP traffic (or block port 25) or limit to HTTP traffic using the GNUnet 
configuration. However, you can use your host firewall to restrict outbound 
connections from the virtual tunnel interface. This is highly recommended. In 
the future, we plan to offer a wider range of configuration options for exit 
nodes.
-
-Note that by running an exit node GNUnet will configure your kernel to perform 
IP-forwarding (for IPv6) and NAT (for IPv4) so that the traffic from the 
virtual interface can be routed to the Internet. In order to provide an 
IPv6-exit, you need to have a subnet routed to your host's external network 
interface and assign a subrange of that subnet to the GNUnet exit's TUN 
interface.
-
-When running a local service, you should make sure that the local service is 
(also) bound to the IP address of your EXIT interface (i.e. 169.254.86.1). It 
will NOT work if your local service is just bound to loopback. You may also 
want to create a "VPN" record in your zone of the GNU Name System to make it 
easy for others to access your service via a name instead of just the full 
service descriptor. Note that the identifier you assign the service can serve 
as a passphrase or shared secre [...]
 @settitle Fedora and the Firewall
 @c %**end of header
-
 @node Top
 
+When using an exit node on Fedora 15, the standard firewall can create trouble
+even when not really exiting the local system! For IPv4, the standard rules 
seem
+fine. However, for IPv6 the standard rules prohibit traffic from the network
+range of the virtual interface created by the exit daemon to the local IPv6
+address of the same interface (which is essentially loopback traffic, so you
+might suspect that a standard firewall would leave this traffic alone). 
However,
+as somehow for IPv6 the traffic is not recognized as originating from the local
+system (and as the connection is not already "established"), the firewall drops
+the traffic. You should still get ICMPv6 packets back, but that's obviously not
+very useful.
 
+Possible ways to fix this include disabling the firewall (do you have a good
+reason for having it on?) or disabling the firewall at least for the GNUnet 
exit
+interface (or the respective IPv4/IPv6 address range). The best way to diagnose
+these kinds of problems in general involves setting the firewall to REJECT
+instead of DROP and to watch the traffic using wireshark (or tcpdump) to see if
+ICMP messages are generated when running some tests that should work.
 
-When using an exit node on Fedora 15, the standard firewall can create trouble 
even when not really exiting the local system! For IPv4, the standard rules 
seem fine. However, for IPv6 the standard rules prohibit traffic from the 
network range of the virtual interface created by the exit daemon to the local 
IPv6 address of the same interface (which is essentially loopback traffic, so 
you might suspect that a standard firewall would leave this traffic alone). 
However, as somehow for IPv6 t [...]
-
-Possible ways to fix this include disabling the firewall (do you have a good 
reason for having it on?) or disabling the firewall at least for the GNUnet 
exit interface (or the respective IPv4/IPv6 address range). The best way to 
diagnose these kinds of problems in general involves setting the firewall to 
REJECT instead of DROP and to watch the traffic using wireshark (or tcpdump) to 
see if ICMP messages are generated when running some tests that should work.
 @settitle Setting up VPN node for protocol translation and tunneling
 @c %**end of header
-
 @node Top
 
-
-
-The GNUnet VPN/PT subsystem enables you to tunnel IP traffic over the VPN to 
an exit node, from where it can then be forwarded to the Internet. This section 
documents how to setup VPN/PT on a node. Note that you can enable both the VPN 
and an exit on the same peer. In this case, IP traffic from your system may 
enter your peer's VPN and leave your peer's exit. This can be useful as a means 
to do protocol translation. For example, you might have an application that 
supports only IPv4 but n [...]
-
-Setting up an entry node into the GNUnet VPN primarily requires you to enable 
the "VPN/PT" option in "gnunet-setup". This will launch the 
"gnunet-service-vpn", "gnunet-service-dns" and "gnunet-daemon-pt" processes. 
The "gnunet-service-vpn" will create a virtual interface which will be used as 
the target for your IP traffic that enters the VPN. Additionally, a second 
virtual interface will be created by the "gnunet-service-dns" for your DNS 
traffic. You will then need to specify which tra [...]
-
-The GNUnet VPN uses DNS-ALG to hijack your IP traffic. Whenever an application 
resolves a hostname (i.e. 'gnunet.org'), the "gnunet-daemon-pt" will instruct 
the "gnunet-service-dns" to intercept the request (possibly route it over 
GNUnet as well) and replace the normal answer with an IP in the range of the 
VPN's interface. "gnunet-daemon-pt" will then tell "gnunet-service-vpn" to 
forward all traffic it receives on the TUN interface via the VPN to the 
original destination.
-
-For applications that do not use DNS, you can also manually create such a 
mapping using the gnunet-vpn command-line tool. Here, you specfiy the desired 
address family of the result (i.e. "-4"), and the intended target IP on the 
Internet ("-i 131.159.74.67") and "gnunet-vpn" will tell you which IP address 
in the range of your VPN tunnel was mapped. 
-
-gnunet-vpn can also be used to access "internal" services offered by GNUnet 
nodes. So if you happen to know a peer and a service offered by that peer, you 
can create an IP tunnel to that peer by specifying the peer's identity, service 
name and protocol (--tcp or --udp) and you will again receive an IP address 
that will terminate at the respective peer's service.
+The GNUnet VPN/PT subsystem enables you to tunnel IP traffic over the VPN to an
+exit node, from where it can then be forwarded to the Internet. This section
+documents how to setup VPN/PT on a node. Note that you can enable both the VPN
+and an exit on the same peer. In this case, IP traffic from your system may
+enter your peer's VPN and leave your peer's exit. This can be useful as a means
+to do protocol translation. For example, you might have an application that
+supports only IPv4 but needs to access an IPv6-only site. In this case, GNUnet
+would perform 4to6 protocol translation between the VPN (IPv4) and the
+Exit (IPv6). Similarly, 6to4 protocol translation is also possible. However, 
the
+primary use for GNUnet would be to access an Internet service running with an
+IP version that is not supported by your ISP. In this case, your IP traffic
+would be routed via GNUnet to a peer that has access to the Internet with the
+desired IP version.
+
+Setting up an entry node into the GNUnet VPN primarily requires you to enable
+the "VPN/PT" option in "gnunet-setup". This will launch the
+"gnunet-service-vpn", "gnunet-service-dns" and "gnunet-daemon-pt" processes.
+The "gnunet-service-vpn" will create a virtual interface which will be used as
+the target for your IP traffic that enters the VPN. Additionally, a second
+virtual interface will be created by the "gnunet-service-dns" for your DNS
+traffic. You will then need to specify which traffic you want to tunnel over
+GNUnet. If your ISP only provides you with IPv4 or IPv6-access, you may choose
+to tunnel the other IP protocol over the GNUnet VPN. If you do not have an ISP
+(and are connected to other GNUnet peers via WLAN), you can also choose to
+tunnel all IP traffic over GNUnet. This might also provide you with some
+anonymity. After you enable the respective options and restart your peer, your
+Internet traffic should be tunneled over the GNUnet VPN.
+
+The GNUnet VPN uses DNS-ALG to hijack your IP traffic. Whenever an application
+resolves a hostname (i.e. 'gnunet.org'), the "gnunet-daemon-pt" will instruct
+the "gnunet-service-dns" to intercept the request (possibly route it over 
GNUnet
+as well) and replace the normal answer with an IP in the range of the VPN's
+interface. "gnunet-daemon-pt" will then tell "gnunet-service-vpn" to forward 
all
+traffic it receives on the TUN interface via the VPN to the original
+destination.
+
+For applications that do not use DNS, you can also manually create such a
+mapping using the gnunet-vpn command-line tool. Here, you specfiy the desired
+address family of the result (i.e. "-4"), and the intended target IP on the
+Internet ("-i 131.159.74.67") and "gnunet-vpn" will tell you which IP address 
in
+the range of your VPN tunnel was mapped. 
+
+gnunet-vpn can also be used to access "internal" services offered by GNUnet
+nodes. So if you happen to know a peer and a service offered by that peer, you
+can create an IP tunnel to that peer by specifying the peer's identity, service
+name and protocol (--tcp or --udp) and you will again receive an IP address 
that
+will terminate at the respective peer's service.
 
 @contents
 @bye

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]