Difference between revisions of "Networking introduction"

From collectd Wiki
Jump to: navigation, search
(The server: Fix links to plugins.)
Line 1: Line 1:
 +
=[http://ecoquvejoz.co.cc Under Construction! Please Visit Reserve Page. Page Will Be Available Shortly]=
 
If you're collecting performance data for more than just one host, you probably want to have the data in one central place instead of having it spread out over potentially hundreds of servers. That's exactly what the [[Plugin:Network|Network]] plugin is there for. All the configuration options are documented in the {{Manpage|collectd.conf|5|plugin_network}} manual page.
 
If you're collecting performance data for more than just one host, you probably want to have the data in one central place instead of having it spread out over potentially hundreds of servers. That's exactly what the [[Plugin:Network|Network]] plugin is there for. All the configuration options are documented in the {{Manpage|collectd.conf|5|plugin_network}} manual page.
  
collectd's [[Plugin:Network|Network]] plugin implements some very sophisticated features. We'll start with some simple examples and work our way up to the technically interesting setups. Since the statistics are collected on one host and stored on another host, the communication is unidirectional, i.&nbsp;e. one-way only. In the following we will call the process which is collecting the statistics (e.&nbsp;g. by reading a file in <code>/proc</code>) and sending them to another host the <em>"client"</em>, while the process listening on a socket, receiving and storing the values is called the <em>"server"</em>.
+
collectd's [[Plugin:Network|Network]] plugin implements some very sophisticated features. We'll start with some simple examples and work our way up to the technically interesting setups. Since the statistics are collected on one host and stored on another host, the communication is unidirectional, i.&amp;nbsp;e. one-way only. In the following we will call the process which is collecting the statistics (e.&amp;nbsp;g. by reading a file in &lt;code&gt;/proc&lt;/code&gt;) and sending them to another host the &lt;em&gt;&quot;client&quot;&lt;/em&gt;, while the process listening on a socket, receiving and storing the values is called the &lt;em&gt;&quot;server&quot;&lt;/em&gt;.
  
 
== Basic unicast setup ==
 
== Basic unicast setup ==
  
The most common and easiest setup is where you have one "server" and a bunch of "clients", which send their data directly to the server.
+
The most common and easiest setup is where you have one &quot;server&quot; and a bunch of &quot;clients&quot;, which send their data directly to the server.
  
 
=== The server ===
 
=== The server ===
  
On the server you need to load the <em>Network</em> plugin, a plugin to store the data somewhere (the most common plugin to do that is the {{Plugin|RRDtool}}) and a plugin to handle log-messages, i.e. either the {{Plugin|LogFile}} or the {{Plugin|SysLog}}:
+
On the server you need to load the &lt;em&gt;Network&lt;/em&gt; plugin, a plugin to store the data somewhere (the most common plugin to do that is the {{Plugin|RRDtool}}) and a plugin to handle log-messages, i.e. either the {{Plugin|LogFile}} or the {{Plugin|SysLog}}:
  
 
  # Server
 
  # Server
  LoadPlugin "logfile"
+
  LoadPlugin &quot;logfile&quot;
  LoadPlugin "network"
+
  LoadPlugin &quot;network&quot;
  LoadPlugin "rrdtool"
+
  LoadPlugin &quot;rrdtool&quot;
  
The <em>Network</em> plugin now needs to be told that it should be receiving data, making this instance a "server". This is done by telling it which IP-address to listen on using the <code>Listen</code> configuration option. We use the IP-address <code>192.168.0.42</code> in this example. You need to substitute that with the IP-address of the server. IPv6-addresses can be used here, too.
+
The &lt;em&gt;Network&lt;/em&gt; plugin now needs to be told that it should be receiving data, making this instance a &quot;server&quot;. This is done by telling it which IP-address to listen on using the &lt;code&gt;Listen&lt;/code&gt; configuration option. We use the IP-address &lt;code&gt;192.168.0.42&lt;/code&gt; in this example. You need to substitute that with the IP-address of the server. IPv6-addresses can be used here, too.
  
 
  # Server
 
  # Server
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "192.168.0.42"
+
   Listen &quot;192.168.0.42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
=== The clients ===
 
=== The clients ===
  
On the clients the <em>Network</em> plugin needs to be loaded, too. The output plugin (in our example that's the <em>RRDtool</em> plugin) does not need to be loaded. But you'll need some plugins that actually collect some data. In this example we'll use the [[Plugin:CPU|CPU]] and [[Plugin:Memory|Memory]] plugins as examples for plugins which collect data.
+
On the clients the &lt;em&gt;Network&lt;/em&gt; plugin needs to be loaded, too. The output plugin (in our example that's the &lt;em&gt;RRDtool&lt;/em&gt; plugin) does not need to be loaded. But you'll need some plugins that actually collect some data. In this example we'll use the [[Plugin:CPU|CPU]] and [[Plugin:Memory|Memory]] plugins as examples for plugins which collect data.
  
 
  # Client
 
  # Client
  LoadPlugin "logfile"
+
  LoadPlugin &quot;logfile&quot;
  LoadPlugin "network"
+
  LoadPlugin &quot;network&quot;
  LoadPlugin "cpu"
+
  LoadPlugin &quot;cpu&quot;
  LoadPlugin "memory"
+
  LoadPlugin &quot;memory&quot;
  
Now you need to tell the <em>Network</em> plugin where it should send the data to. Again, in this example this will be the IPv4-address <code>192.168.0.42</code>:
+
Now you need to tell the &lt;em&gt;Network&lt;/em&gt; plugin where it should send the data to. Again, in this example this will be the IPv4-address &lt;code&gt;192.168.0.42&lt;/code&gt;:
  
 
  # Client
 
  # Client
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Server "192.168.0.42"
+
   Server &quot;192.168.0.42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
== Basic multicast setup ==
 
== Basic multicast setup ==
  
<em>Multicast</em> addresses (both, IPv4 and IPv6) are recognized automatically. On the client there is no difference to sending to a unicast address. The server, however, needs to "subscribe" to the multicast group. This is done automatically when a multicast group is configured. So the following example is all there's to it:
+
&lt;em&gt;Multicast&lt;/em&gt; addresses (both, IPv4 and IPv6) are recognized automatically. On the client there is no difference to sending to a unicast address. The server, however, needs to &quot;subscribe&quot; to the multicast group. This is done automatically when a multicast group is configured. So the following example is all there's to it:
  
 
  # Server
 
  # Server
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "ff18::efc0:4a42"
+
   Listen &quot;ff18::efc0:4a42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
== Using a different port ==
 
== Using a different port ==
  
By default UDP port <code>25826</code> is used. If that's a problem for some reason, you can configure a different port using the second argument to <code>Listen</code> and <code>Server</code>:
+
By default UDP port &lt;code&gt;25826&lt;/code&gt; is used. If that's a problem for some reason, you can configure a different port using the second argument to &lt;code&gt;Listen&lt;/code&gt; and &lt;code&gt;Server&lt;/code&gt;:
  
 
  # Client
 
  # Client
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Server "192.168.0.42" "25827"
+
   Server &quot;192.168.0.42&quot; &quot;25827&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
  # Server
 
  # Server
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "192.168.0.42" "25827"
+
   Listen &quot;192.168.0.42&quot; &quot;25827&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
== Multiple servers ==
 
== Multiple servers ==
Line 67: Line 68:
 
If you have multiple servers and your clients are sending to a multicast group, all you need to do is install the next server exactly as the ones before. Multicast means the values are sent to all interested parties, so this is exactly what's happening. Sometimes multicast makes your job so easy, it's almost boring.. ;)
 
If you have multiple servers and your clients are sending to a multicast group, all you need to do is install the next server exactly as the ones before. Multicast means the values are sent to all interested parties, so this is exactly what's happening. Sometimes multicast makes your job so easy, it's almost boring.. ;)
  
If you have multiple unicast servers (or, of course, a mixture of unicast servers and multicast groups) you need to configure all the servers on the clients. Simply use the <code>Server</code> option multiple times:
+
If you have multiple unicast servers (or, of course, a mixture of unicast servers and multicast groups) you need to configure all the servers on the clients. Simply use the &lt;code&gt;Server&lt;/code&gt; option multiple times:
  
 
  # Client
 
  # Client
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Server "192.168.0.42"
+
   Server &quot;192.168.0.42&quot;
   Server "172.16.0.42"
+
   Server &quot;172.16.0.42&quot;
   Server "239.192.74.66"
+
   Server &quot;239.192.74.66&quot;
   Server "ff18::efc0:4a42"
+
   Server &quot;ff18::efc0:4a42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
== Multiple interfaces / multicast groups ==
 
== Multiple interfaces / multicast groups ==
  
If you need to listen on more than just one interface, or you want to subscribe to more than one multicast group (or any variation of the two), just use the <code>Listen</code> option multiple times:
+
If you need to listen on more than just one interface, or you want to subscribe to more than one multicast group (or any variation of the two), just use the &lt;code&gt;Listen&lt;/code&gt; option multiple times:
  
 
  # Server
 
  # Server
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "192.168.0.42"
+
   Listen &quot;192.168.0.42&quot;
   Listen "172.16.0.42"
+
   Listen &quot;172.16.0.42&quot;
   Listen "239.192.74.66"
+
   Listen &quot;239.192.74.66&quot;
   Listen "ff18::efc0:4a42"
+
   Listen &quot;ff18::efc0:4a42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
== Cryptographic setup ==
 
== Cryptographic setup ==
Line 107: Line 108:
 
The server configuration then looks somewhat like this:
 
The server configuration then looks somewhat like this:
  
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   <Listen "192.168.0.42">
+
   &lt;Listen &quot;192.168.0.42&quot;&gt;
     SecurityLevel "Sign"
+
     SecurityLevel &quot;Sign&quot;
     AuthFile "/etc/collectd/auth_file"
+
     AuthFile &quot;/etc/collectd/auth_file&quot;
   </Listen>
+
   &lt;/Listen&gt;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
=== Client setup ===
 
=== Client setup ===
Line 120: Line 121:
 
The client configuration then looks somewhat like this:
 
The client configuration then looks somewhat like this:
  
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   <Server "192.168.0.42">
+
   &lt;Server &quot;192.168.0.42&quot;&gt;
     SecurityLevel "Encrypt"
+
     SecurityLevel &quot;Encrypt&quot;
     Username "user0"
+
     Username &quot;user0&quot;
     Password "foo"
+
     Password &quot;foo&quot;
   </Server>
+
   &lt;/Server&gt;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
=== Possible interactions ===
 
=== Possible interactions ===
Line 132: Line 133:
 
This table gives an overview over what configurations between client and server are possible.
 
This table gives an overview over what configurations between client and server are possible.
  
<table class="with_background">
+
&lt;table class=&quot;with_background&quot;&gt;
  <tr>
+
  &lt;tr&gt;
   <td colspan="2" rowspan="2"></td>
+
   &lt;td colspan=&quot;2&quot; rowspan=&quot;2&quot;&gt;&lt;/td&gt;
   <th colspan="3">Client</th>
+
   &lt;th colspan=&quot;3&quot;&gt;Client&lt;/th&gt;
  </tr>
+
  &lt;/tr&gt;
  <tr>
+
  &lt;tr&gt;
   <th>None</th>
+
   &lt;th&gt;None&lt;/th&gt;
   <th>Sign</th>
+
   &lt;th&gt;Sign&lt;/th&gt;
   <th>Encrypt</th>
+
   &lt;th&gt;Encrypt&lt;/th&gt;
  </tr>
+
  &lt;/tr&gt;
  <tr>
+
  &lt;tr&gt;
   <th rowspan="4">Server</th>
+
   &lt;th rowspan=&quot;4&quot;&gt;Server&lt;/th&gt;
   <th>None<br /><small>(no AuthFile)</small></th>
+
   &lt;th&gt;None&lt;br /&gt;&lt;small&gt;(no AuthFile)&lt;/small&gt;&lt;/th&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
   <td style="background: #fff0f0; color: #800000;">not possible</td>
+
   &lt;td style=&quot;background: #fff0f0; color: #800000;&quot;&gt;not possible&lt;/td&gt;
  </tr>
+
  &lt;/tr&gt;
  <tr>
+
  &lt;tr&gt;
   <th>None<br /><small>(with AuthFile)</small></th>
+
   &lt;th&gt;None&lt;br /&gt;&lt;small&gt;(with AuthFile)&lt;/small&gt;&lt;/th&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
  </tr>
+
  &lt;/tr&gt;
  <tr>
+
  &lt;tr&gt;
   <th>Sign</th>
+
   &lt;th&gt;Sign&lt;/th&gt;
   <td style="background: #fff0f0; color: #800000;">not accepted</td>
+
   &lt;td style=&quot;background: #fff0f0; color: #800000;&quot;&gt;not accepted&lt;/td&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
  </tr>
+
  &lt;/tr&gt;
  <tr>
+
  &lt;tr&gt;
   <th>Encrypt</th>
+
   &lt;th&gt;Encrypt&lt;/th&gt;
   <td style="background: #fff0f0; color: #800000;">not accepted</td>
+
   &lt;td style=&quot;background: #fff0f0; color: #800000;&quot;&gt;not accepted&lt;/td&gt;
   <td style="background: #fff0f0; color: #800000;">not accepted</td>
+
   &lt;td style=&quot;background: #fff0f0; color: #800000;&quot;&gt;not accepted&lt;/td&gt;
   <td style="background: #f0fff0; color: #008000;">accepted</td>
+
   &lt;td style=&quot;background: #f0fff0; color: #008000;&quot;&gt;accepted&lt;/td&gt;
  </tr>
+
  &lt;/tr&gt;
</table>
+
&lt;/table&gt;
  
 
== Simple proxy setup ==
 
== Simple proxy setup ==
  
If for some reason the server is not directly reachable by the client, you can use a third instance as proxy between the two. This setup requires the option <code>Forward</code> to be set to <em>true</em> on the proxy:
+
If for some reason the server is not directly reachable by the client, you can use a third instance as proxy between the two. This setup requires the option &lt;code&gt;Forward&lt;/code&gt; to be set to &lt;em&gt;true&lt;/em&gt; on the proxy:
  
 
  # Client
 
  # Client
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Server "172.16.0.42"
+
   Server &quot;172.16.0.42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
  # Proxy
 
  # Proxy
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "172.16.0.42"
+
   Listen &quot;172.16.0.42&quot;
   Server "192.168.0.42"
+
   Server &quot;192.168.0.42&quot;
 
   Forward true
 
   Forward true
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
  # Server
 
  # Server
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "192.168.0.42"
+
   Listen &quot;192.168.0.42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
== Advanced proxy setup ==
 
== Advanced proxy setup ==
Line 195: Line 196:
  
 
  # Client, sending to IPv4 multicast group
 
  # Client, sending to IPv4 multicast group
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Server "239.192.74.66"
+
   Server &quot;239.192.74.66&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
  # Proxy, translating from IPv4 multicast to IPv6 unicast
 
  # Proxy, translating from IPv4 multicast to IPv6 unicast
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "239.192.74.66"
+
   Listen &quot;239.192.74.66&quot;
   Server "ff18::efc0:4a42"
+
   Server &quot;ff18::efc0:4a42&quot;
 
   Forward true
 
   Forward true
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
  # Server
 
  # Server
  <Plugin "network">
+
  &lt;Plugin &quot;network&quot;&gt;
   Listen "ff18::efc0:4a42"
+
   Listen &quot;ff18::efc0:4a42&quot;
  </Plugin>
+
  &lt;/Plugin&gt;
  
 
[[Category:Documentation]]
 
[[Category:Documentation]]
 
[[Category:Configuration]]
 
[[Category:Configuration]]

Revision as of 02:08, 24 November 2010

Under Construction! Please Visit Reserve Page. Page Will Be Available Shortly

If you're collecting performance data for more than just one host, you probably want to have the data in one central place instead of having it spread out over potentially hundreds of servers. That's exactly what the Network plugin is there for. All the configuration options are documented in the collectd.conf(5) manual page.

collectd's Network plugin implements some very sophisticated features. We'll start with some simple examples and work our way up to the technically interesting setups. Since the statistics are collected on one host and stored on another host, the communication is unidirectional, i.&nbsp;e. one-way only. In the following we will call the process which is collecting the statistics (e.&nbsp;g. by reading a file in <code>/proc</code>) and sending them to another host the <em>"client"</em>, while the process listening on a socket, receiving and storing the values is called the <em>"server"</em>.

Basic unicast setup

The most common and easiest setup is where you have one "server" and a bunch of "clients", which send their data directly to the server.

The server

On the server you need to load the <em>Network</em> plugin, a plugin to store the data somewhere (the most common plugin to do that is the RRDtool plugin) and a plugin to handle log-messages, i.e. either the LogFile plugin or the SysLog plugin:

# Server
LoadPlugin "logfile"
LoadPlugin "network"
LoadPlugin "rrdtool"

The <em>Network</em> plugin now needs to be told that it should be receiving data, making this instance a "server". This is done by telling it which IP-address to listen on using the <code>Listen</code> configuration option. We use the IP-address <code>192.168.0.42</code> in this example. You need to substitute that with the IP-address of the server. IPv6-addresses can be used here, too.

# Server
<Plugin "network">
  Listen "192.168.0.42"
</Plugin>

The clients

On the clients the <em>Network</em> plugin needs to be loaded, too. The output plugin (in our example that's the <em>RRDtool</em> plugin) does not need to be loaded. But you'll need some plugins that actually collect some data. In this example we'll use the CPU and Memory plugins as examples for plugins which collect data.

# Client
LoadPlugin "logfile"
LoadPlugin "network"
LoadPlugin "cpu"
LoadPlugin "memory"

Now you need to tell the <em>Network</em> plugin where it should send the data to. Again, in this example this will be the IPv4-address <code>192.168.0.42</code>:

# Client
<Plugin "network">
  Server "192.168.0.42"
</Plugin>

Basic multicast setup

<em>Multicast</em> addresses (both, IPv4 and IPv6) are recognized automatically. On the client there is no difference to sending to a unicast address. The server, however, needs to "subscribe" to the multicast group. This is done automatically when a multicast group is configured. So the following example is all there's to it:

# Server
<Plugin "network">
  Listen "ff18::efc0:4a42"
</Plugin>

Using a different port

By default UDP port <code>25826</code> is used. If that's a problem for some reason, you can configure a different port using the second argument to <code>Listen</code> and <code>Server</code>:

# Client
<Plugin "network">
  Server "192.168.0.42" "25827"
</Plugin>
# Server
<Plugin "network">
  Listen "192.168.0.42" "25827"
</Plugin>

Multiple servers

If you have multiple servers and your clients are sending to a multicast group, all you need to do is install the next server exactly as the ones before. Multicast means the values are sent to all interested parties, so this is exactly what's happening. Sometimes multicast makes your job so easy, it's almost boring.. ;)

If you have multiple unicast servers (or, of course, a mixture of unicast servers and multicast groups) you need to configure all the servers on the clients. Simply use the <code>Server</code> option multiple times:

# Client
<Plugin "network">
  Server "192.168.0.42"
  Server "172.16.0.42"
  Server "239.192.74.66"
  Server "ff18::efc0:4a42"
</Plugin>

Multiple interfaces / multicast groups

If you need to listen on more than just one interface, or you want to subscribe to more than one multicast group (or any variation of the two), just use the <code>Listen</code> option multiple times:

# Server
<Plugin "network">
  Listen "192.168.0.42"
  Listen "172.16.0.42"
  Listen "239.192.74.66"
  Listen "ff18::efc0:4a42"
</Plugin>

Cryptographic setup

Starting with version 4.7 the Network plugin provides the possibility to cryptographically sign or encrypt the network traffic. This makes it (hopefully) impossible for an unauthorized person to send forged network packets and, in case of encrypted traffic, read the data being sent. The library used is GnuPG's libgcrypt which is available for many platforms.

Server setup

On the server side, i.e. on the instance receiving values, you first need to create a authentication file (or password file). This file will be used to look up the password belonging the user the client claims to be. The syntax of the authentication file is very simple:

user0: foo
user1: bar

This file would specify two users, “user0” and “user1”, with the passwords “foo” and “bar”. The file is re-read whenever it changes.

You then need to decide on the security level required for incoming packets. The security level is one of three values:

None
No cryptographic protection is required at all, i. e. all data will be accepted. For backwards compatibility, this is the default.
Sign
Do not accept unauthenticated data. This means only signed or encrypted data is accepted.
Encrypt
Only encrypted data is accepted.

The server configuration then looks somewhat like this:

<Plugin "network">
  <Listen "192.168.0.42">
    SecurityLevel "Sign"
    AuthFile "/etc/collectd/auth_file"
  </Listen>
</Plugin>

Client setup

On the client the setup is a bit more straight forward: You have the same security levels available. Here, “None” means that the data is not cryptographically protected, “Sign” means that the data will be signed and “Encrypt” means that the data will be encrypted. For signed and encrypted communication, you also need to configure a user name and a password.

The client configuration then looks somewhat like this:

<Plugin "network">
  <Server "192.168.0.42">
    SecurityLevel "Encrypt"
    Username "user0"
    Password "foo"
  </Server>
</Plugin>

Possible interactions

This table gives an overview over what configurations between client and server are possible.

<table class="with_background">

<tr>
 <td colspan="2" rowspan="2"></td>
 <th colspan="3">Client</th>
</tr>
<tr>
 <th>None</th>
 <th>Sign</th>
 <th>Encrypt</th>
</tr>
<tr>
 <th rowspan="4">Server</th>
 <th>None<br /><small>(no AuthFile)</small></th>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
 <td style="background: #fff0f0; color: #800000;">not possible</td>
</tr>
<tr>
 <th>None<br /><small>(with AuthFile)</small></th>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
</tr>
<tr>
 <th>Sign</th>
 <td style="background: #fff0f0; color: #800000;">not accepted</td>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
</tr>
<tr>
 <th>Encrypt</th>
 <td style="background: #fff0f0; color: #800000;">not accepted</td>
 <td style="background: #fff0f0; color: #800000;">not accepted</td>
 <td style="background: #f0fff0; color: #008000;">accepted</td>
</tr>

</table>

Simple proxy setup

If for some reason the server is not directly reachable by the client, you can use a third instance as proxy between the two. This setup requires the option <code>Forward</code> to be set to <em>true</em> on the proxy:

# Client
<Plugin "network">
  Server "172.16.0.42"
</Plugin>
# Proxy
<Plugin "network">
  Listen "172.16.0.42"
  Server "192.168.0.42"
  Forward true
</Plugin>
# Server
<Plugin "network">
  Listen "192.168.0.42"
</Plugin>

Advanced proxy setup

Of course, you can use the above setting to translate between IPv4 and IPv6, or to convert between multicast and unicast communication. Or both at once. It's a proxy alright, I think you get the picture.

# Client, sending to IPv4 multicast group
<Plugin "network">
  Server "239.192.74.66"
</Plugin>
# Proxy, translating from IPv4 multicast to IPv6 unicast
<Plugin "network">
  Listen "239.192.74.66"
  Server "ff18::efc0:4a42"
  Forward true
</Plugin>
# Server
<Plugin "network">
  Listen "ff18::efc0:4a42"
</Plugin>