| 1 |
=head1 NAME |
| 2 |
|
| 3 |
gvpe.conf - configuration file for the GNU VPE daemon |
| 4 |
|
| 5 |
=head1 SYNOPSIS |
| 6 |
|
| 7 |
# global options for all nodes |
| 8 |
udp-port = 407 |
| 9 |
mtu = 1492 |
| 10 |
ifname = vpn0 |
| 11 |
|
| 12 |
# first node is named branch1 and is at 1.2.3.4 |
| 13 |
node = branch1 |
| 14 |
hostname = 1.2.3.4 |
| 15 |
|
| 16 |
# second node uses dns to resolve the address |
| 17 |
node = branch2 |
| 18 |
hostname = www.example.net |
| 19 |
udp-port = 500 # this host uses a different udp-port |
| 20 |
|
| 21 |
# third node has no fixed ip address |
| 22 |
node = branch3 |
| 23 |
connect = ondemand |
| 24 |
|
| 25 |
=head1 DESCRIPTION |
| 26 |
|
| 27 |
The gvpe config file consists of a series of lines that contain C<variable |
| 28 |
= value> pairs. Empty lines are ignored. Comments start with a C<#> and |
| 29 |
extend to the end of the line. They can be used on their own lines, or |
| 30 |
after any directives. Whitespace is allowed around the C<=> sign or after |
| 31 |
values, but not within the variable names or values themselves. |
| 32 |
|
| 33 |
All settings are applied "in order", that is, later settings of the same |
| 34 |
variable overwrite earlier ones. |
| 35 |
|
| 36 |
The only exceptions to the above are the following directives: |
| 37 |
|
| 38 |
=over 4 |
| 39 |
|
| 40 |
=item node nodename |
| 41 |
|
| 42 |
Introduces a node section. The nodename is used to select the right |
| 43 |
configuration section and is the same string as is passed as an argument |
| 44 |
to the gvpe daemon. |
| 45 |
|
| 46 |
Multiple C<node> statements with the same node name are supported and will |
| 47 |
be merged together. |
| 48 |
|
| 49 |
=item global |
| 50 |
|
| 51 |
This statement switches back to the global section, which is mainly |
| 52 |
useful if you want to include a second config file, e..g for local |
| 53 |
customisations. To do that, simply include this at the very end of your |
| 54 |
config file: |
| 55 |
|
| 56 |
global |
| 57 |
include local.conf |
| 58 |
|
| 59 |
=item on nodename ... |
| 60 |
|
| 61 |
=item on !nodename ... |
| 62 |
|
| 63 |
You can prefix any configuration directive with C<on> and a nodename. GVPE |
| 64 |
will will only "execute" it on the named node, or (if the nodename starts |
| 65 |
with C<!>) on all nodes except the named one. |
| 66 |
|
| 67 |
Example: set the MTU to C<1450> everywhere, C<loglevel> to C<noise> on |
| 68 |
C<branch1>, and C<connect> to C<ondemand> everywhere but on branch2. |
| 69 |
|
| 70 |
mtu = 1450 |
| 71 |
on branch1 loglevel = noise |
| 72 |
on !branch2 connect = ondemand |
| 73 |
|
| 74 |
=item include relative-or-absolute-path |
| 75 |
|
| 76 |
Reads the specified file (the path must not contain whitespace or C<=> |
| 77 |
characters) and evaluate all config directives in it as if they were |
| 78 |
spelled out in place of the C<include> directive. |
| 79 |
|
| 80 |
The path is a printf format string, that is, you must escape any C<%> |
| 81 |
by doubling it, and you can have a single C<%s> inside, which will be |
| 82 |
replaced by the current nodename. |
| 83 |
|
| 84 |
Relative paths are interpreted relative to the GVPE config directory. |
| 85 |
|
| 86 |
Example: include the file F<local.conf> in the config directory on every |
| 87 |
node. |
| 88 |
|
| 89 |
include local.conf |
| 90 |
|
| 91 |
Example: include a file F<conf/>nodenameF<.conf> |
| 92 |
|
| 93 |
include conf/%s.conf |
| 94 |
|
| 95 |
=back |
| 96 |
|
| 97 |
=head1 ANATOMY OF A CONFIG FILE |
| 98 |
|
| 99 |
Usually, a config file starts with a few global settings (like the UDP |
| 100 |
port to listen on), followed by node-specific sections that begin with a |
| 101 |
C<node = nickname> line. |
| 102 |
|
| 103 |
Every node that is part of the network must have a section that starts |
| 104 |
with C<node = nickname>. The number and order of the nodes is important |
| 105 |
and must be the same on all nodes. It is not uncommon for node sections to |
| 106 |
be completely empty - if the default values are right. |
| 107 |
|
| 108 |
Node-specific settings can be used at any time. If used before the first |
| 109 |
node section they will set the default values for all following nodes. |
| 110 |
|
| 111 |
=head1 CONFIG VARIABLES |
| 112 |
|
| 113 |
=head2 GLOBAL SETTINGS |
| 114 |
|
| 115 |
Global settings will affect the behaviour of the running gvpe daemon, that |
| 116 |
is, they are in some sense node-specific (config files can set different |
| 117 |
values on different nodes using C<on>), but will affect the behaviour of |
| 118 |
the gvpe daemon and all connections it creates. |
| 119 |
|
| 120 |
=over 4 |
| 121 |
|
| 122 |
=item chroot = path or / |
| 123 |
|
| 124 |
Tells GVPE to chroot(2) to the specified path after reading all necessary |
| 125 |
files, binding to sockets and running the C<if-up> script, but before |
| 126 |
running C<node-up> or any other scripts. |
| 127 |
|
| 128 |
The special path F</> instructs GVPE to create (and remove) an empty |
| 129 |
temporary directory to use as new root. This is most secure, but makes it |
| 130 |
impossible to use any scripts other than the C<if-up> one. |
| 131 |
|
| 132 |
=item chuid = numerical-uid |
| 133 |
|
| 134 |
=item chgid = numerical-gid |
| 135 |
|
| 136 |
These two options tell GVPE to change to the given user and/or group id |
| 137 |
after reading all necessary files, binding to sockets and running the |
| 138 |
C<if-up> script. |
| 139 |
|
| 140 |
Other scripts, such as C<node-up>, are run with the new user id or group id. |
| 141 |
|
| 142 |
=item chuser = username |
| 143 |
|
| 144 |
Alternative to C<chuid> and C<chgid>: Sets both C<chuid> and C<chgid> |
| 145 |
to the user and (primary) group ids of the specified user (for example, |
| 146 |
C<nobody>). |
| 147 |
|
| 148 |
=item dns-forw-host = hostname/ip |
| 149 |
|
| 150 |
The DNS server to forward DNS requests to for the DNS tunnel protocol |
| 151 |
(default: C<127.0.0.1>, changing it is highly recommended). |
| 152 |
|
| 153 |
=item dns-forw-port = port-number |
| 154 |
|
| 155 |
The port where the C<dns-forw-host> is to be contacted (default: C<53>, |
| 156 |
which is fine in most cases). |
| 157 |
|
| 158 |
=item dns-case-preserving = yes|true|on | no|false|off |
| 159 |
|
| 160 |
Sets whether the DNS transport forwarding server preserves case (DNS |
| 161 |
servers have to, but some access systems are even more broken than others) |
| 162 |
(default: true). |
| 163 |
|
| 164 |
Normally, when the forwarding server changes the case of domain names then |
| 165 |
GVPE will automatically set this to false. |
| 166 |
|
| 167 |
=item dns-max-outstanding = integer-number-of-requests |
| 168 |
|
| 169 |
The maximum number of outstanding DNS transport requests |
| 170 |
(default: C<100>). GVPE will never issue more requests then the given |
| 171 |
limit without receiving replies. In heavily overloaded situations it might |
| 172 |
help to set this to a low number (e.g. C<3> or even C<1>) to limit the |
| 173 |
number of parallel requests. |
| 174 |
|
| 175 |
The default should be working OK for most links. |
| 176 |
|
| 177 |
=item dns-overlap-factor = float |
| 178 |
|
| 179 |
The DNS transport uses the minimum request latency (B<min_latency>) seen |
| 180 |
during a connection as it's timing base. This factor (default: C<0.5>, |
| 181 |
must be > 0) is multiplied by B<min_latency> to get the maximum sending |
| 182 |
rate (= minimum send interval), i.e. a factor of C<1> means that a new |
| 183 |
request might be generated every B<min_latency> seconds, which means on |
| 184 |
average there should only ever be one outstanding request. A factor of |
| 185 |
C<0.5> means that GVPE will send requests twice as often as the minimum |
| 186 |
latency measured. |
| 187 |
|
| 188 |
For congested or picky DNS forwarders you could use a value nearer to or |
| 189 |
exceeding C<1>. |
| 190 |
|
| 191 |
The default should be working OK for most links. |
| 192 |
|
| 193 |
=item dns-send-interval = send-interval-in-seconds |
| 194 |
|
| 195 |
The minimum send interval (= maximum rate) that the DNS transport will |
| 196 |
use to send new DNS requests. GVPE will not exceed this rate even when |
| 197 |
the latency is very low. The default is C<0.01>, which means GVPE will |
| 198 |
not send more than 100 DNS requests per connection per second. For |
| 199 |
high-bandwidth links you could go lower, e.g. to C<0.001> or so. For |
| 200 |
congested or rate-limited links, you might want to go higher, say C<0.1>, |
| 201 |
C<0.2> or even higher. |
| 202 |
|
| 203 |
The default should be working OK for most links. |
| 204 |
|
| 205 |
=item dns-timeout-factor = float |
| 206 |
|
| 207 |
Factor to multiply the C<min_latency> (see C<dns-overlap-factor>) by to |
| 208 |
get request timeouts. The default of C<8> means that the DNS transport |
| 209 |
will resend the request when no reply has been received for longer than |
| 210 |
eight times the minimum (= expected) latency, assuming the request or |
| 211 |
reply has been lost. |
| 212 |
|
| 213 |
For congested links a higher value might be necessary (e.g. C<30>). If |
| 214 |
the link is very stable lower values (e.g. C<2>) might work |
| 215 |
nicely. Values near or below C<1> makes no sense whatsoever. |
| 216 |
|
| 217 |
The default should be working OK for most links but will result in low |
| 218 |
throughput if packet loss is high. |
| 219 |
|
| 220 |
=item if-up = relative-or-absolute-path |
| 221 |
|
| 222 |
Sets the path of a script that should be called immediately after the |
| 223 |
network interface is initialized (but not necessarily up). The following |
| 224 |
environment variables are passed to it (the values are just examples). |
| 225 |
|
| 226 |
Variables that have the same value on all nodes: |
| 227 |
|
| 228 |
=over 4 |
| 229 |
|
| 230 |
=item CONFBASE=/etc/gvpe |
| 231 |
|
| 232 |
The configuration base directory. |
| 233 |
|
| 234 |
=item IFNAME=vpn0 |
| 235 |
|
| 236 |
The network interface to initialize. |
| 237 |
|
| 238 |
=item IFTYPE=native # or tincd |
| 239 |
|
| 240 |
=item IFSUBTYPE=linux # or freebsd, darwin etc.. |
| 241 |
|
| 242 |
The interface type (C<native> or C<tincd>) and the subtype (usually the |
| 243 |
OS name in lowercase) that this GVPE was configured for. Can be used to |
| 244 |
select the correct syntax to use for network-related commands. |
| 245 |
|
| 246 |
=item MTU=1436 |
| 247 |
|
| 248 |
The MTU to set the interface to. You can use lower values (if done |
| 249 |
consistently on all nodes), but this is usually either inefficient or |
| 250 |
simply ineffective. |
| 251 |
|
| 252 |
=item NODES=5 |
| 253 |
|
| 254 |
The number of nodes in this GVPE network. |
| 255 |
|
| 256 |
=back |
| 257 |
|
| 258 |
Variables that are node-specific and with values pertaining to the node |
| 259 |
running this GVPE: |
| 260 |
|
| 261 |
=over 4 |
| 262 |
|
| 263 |
=item IFUPDATA=string |
| 264 |
|
| 265 |
The value of the configuration directive C<if-up-data>. |
| 266 |
|
| 267 |
=item MAC=fe:fd:80:00:00:01 |
| 268 |
|
| 269 |
The MAC address the network interface has to use. |
| 270 |
|
| 271 |
Might be used to initialize interfaces on platforms where GVPE does not |
| 272 |
do this automatically. Please see the C<gvpe.osdep(5)> man page for |
| 273 |
platform-specific information. |
| 274 |
|
| 275 |
=item NODENAME=branch1 |
| 276 |
|
| 277 |
The nickname of the node. |
| 278 |
|
| 279 |
=item NODEID=1 |
| 280 |
|
| 281 |
The numerical node ID of the node running this instance of GVPE. The first |
| 282 |
node mentioned in the config file gets ID 1, the second ID 2 and so on. |
| 283 |
|
| 284 |
=back |
| 285 |
|
| 286 |
In addition, all node-specific variables (except C<NODEID>) will be |
| 287 |
available with a postfix of C<_nodeid>, which contains the value for that |
| 288 |
node, e.g. the C<MAC_1> variable contains the MAC address of node #1, while |
| 289 |
the C<NODENAME_22> variable contains the name of node #22. |
| 290 |
|
| 291 |
Here is a simple if-up script: |
| 292 |
|
| 293 |
#!/bin/sh |
| 294 |
ip link set $IFNAME up |
| 295 |
[ $NODENAME = branch1 ] && ip addr add 10.0.0.1 dev $IFNAME |
| 296 |
[ $NODENAME = branch2 ] && ip addr add 10.1.0.1 dev $IFNAME |
| 297 |
ip route add 10.0.0.0/8 dev $IFNAME |
| 298 |
|
| 299 |
More complicated examples (using routing to reduce ARP traffic) can be |
| 300 |
found in the F<etc/> subdirectory of the distribution. |
| 301 |
|
| 302 |
=item ifname = devname |
| 303 |
|
| 304 |
Sets the tun interface name to the given name. The default is OS-specific |
| 305 |
and most probably something like C<tun0>. |
| 306 |
|
| 307 |
=item ifpersist = yes|true|on | no|false|off |
| 308 |
|
| 309 |
Should the tun/tap device be made persistent, that is, should the device |
| 310 |
stay up even when gvpe exits? Some versions of the tunnel device have |
| 311 |
problems sending packets when gvpe is restarted in persistent mode, so |
| 312 |
if the connections can be established but you cannot send packets from |
| 313 |
the local node, try to set this to C<off> and do an ifconfig down on the |
| 314 |
device. |
| 315 |
|
| 316 |
=item ip-proto = numerical-ip-protocol |
| 317 |
|
| 318 |
Sets the protocol number to be used for the rawip protocol. This is a |
| 319 |
global option because all nodes must use the same protocol, and since |
| 320 |
there are no port numbers, you cannot easily run more than one gvpe |
| 321 |
instance using the same protocol, nor can you share the protocol with |
| 322 |
other programs. |
| 323 |
|
| 324 |
The default is 47 (GRE), which has a good chance of tunneling |
| 325 |
through firewalls (but note that gvpe's rawip protocol is not GRE |
| 326 |
compatible). Other common choices are 50 (IPSEC, ESP), 51 (IPSEC, AH), 4 |
| 327 |
(IPIP tunnels) or 98 (ENCAP, rfc1241). |
| 328 |
|
| 329 |
Many versions of Linux seem to have a bug that causes them to reorder |
| 330 |
packets for some ip protocols (GRE, ESP) but not for others (AH), so |
| 331 |
choose wisely (that is, use 51, AH). |
| 332 |
|
| 333 |
=item http-proxy-host = hostname/ip |
| 334 |
|
| 335 |
The C<http-proxy-*> family of options are only available if gvpe was |
| 336 |
compiled with the C<--enable-http-proxy> option and enable tunneling of |
| 337 |
tcp connections through a http proxy server. |
| 338 |
|
| 339 |
C<http-proxy-host> and C<http-proxy-port> should specify the hostname and |
| 340 |
port number of the proxy server. See C<http-proxy-loginpw> if your proxy |
| 341 |
requires authentication. |
| 342 |
|
| 343 |
Please note that gvpe will still try to resolve all hostnames in the |
| 344 |
configuration file, so if you are behind a proxy without access to a DNS |
| 345 |
server better use numerical IP addresses. |
| 346 |
|
| 347 |
To make best use of this option disable all protocols except TCP in your |
| 348 |
config file and make sure your routers (or all other nodes) are listening |
| 349 |
on a port that the proxy allows (443, https, is a common choice). |
| 350 |
|
| 351 |
If you have a router, connecting to it will suffice. Otherwise TCP must be |
| 352 |
enabled on all nodes. |
| 353 |
|
| 354 |
Example: |
| 355 |
|
| 356 |
http-proxy-host = proxy.example.com |
| 357 |
http-proxy-port = 3128 # 8080 is another common choice |
| 358 |
http-proxy-auth = schmorp:grumbeere |
| 359 |
|
| 360 |
=item http-proxy-port = proxy-tcp-port |
| 361 |
|
| 362 |
The port where your proxy server listens. |
| 363 |
|
| 364 |
=item http-proxy-auth = login:password |
| 365 |
|
| 366 |
The optional login and password used to authenticate to the proxy server, |
| 367 |
separated by a literal colon (C<:>). Only basic authentication is |
| 368 |
currently supported. |
| 369 |
|
| 370 |
=item keepalive = seconds |
| 371 |
|
| 372 |
Sets the keepalive probe interval in seconds (default: C<60>). After this |
| 373 |
many seconds of inactivity the daemon will start to send keepalive probe |
| 374 |
every 3 seconds until it receives a reply from the other end. If no reply |
| 375 |
is received within 15 seconds, the peer is considered unreachable and the |
| 376 |
connection is closed. |
| 377 |
|
| 378 |
=item loglevel = noise|trace|debug|info|notice|warn|error|critical |
| 379 |
|
| 380 |
Set the logging level. Connection established messages are logged at level |
| 381 |
C<info>, notable errors are logged with C<error>. Default is C<info>. |
| 382 |
|
| 383 |
=item mtu = bytes |
| 384 |
|
| 385 |
Sets the maximum MTU that should be used on outgoing packets (basically |
| 386 |
the MTU of the outgoing interface) The daemon will automatically calculate |
| 387 |
maximum overhead (e.g. UDP header size, encryption blocksize...) and pass |
| 388 |
this information to the C<if-up> script. |
| 389 |
|
| 390 |
Recommended values are 1500 (ethernet), 1492 (pppoe), 1472 (pptp). |
| 391 |
|
| 392 |
This value must be the minimum of the MTU values of all nodes. |
| 393 |
|
| 394 |
=item nfmark = integer |
| 395 |
|
| 396 |
This advanced option, when set to a nonzero value (default: C<0>), tries |
| 397 |
to set the netfilter mark (or fwmark) value on all sockets gvpe uses to |
| 398 |
send packets. |
| 399 |
|
| 400 |
This can be used to make gvpe use a different set of routing rules. For |
| 401 |
example, on GNU/Linux, the C<if-up> could set C<nfmark> to 1000 and then |
| 402 |
put all routing rules into table C<99> and then use an ip rule to make |
| 403 |
gvpe traffic avoid that routing table, in effect routing normal traffic |
| 404 |
via gvpe and gvpe traffic via the normal system routing tables: |
| 405 |
|
| 406 |
ip rule add not fwmark 1000 lookup 99 |
| 407 |
|
| 408 |
=item node-up = relative-or-absolute-path |
| 409 |
|
| 410 |
Sets a command (default: none) that should be called whenever a connection |
| 411 |
is established (even on rekeying operations). Note that node-up/down |
| 412 |
scripts will be run asynchronously, but execution is serialised, so there |
| 413 |
will only ever be one such script running. |
| 414 |
|
| 415 |
In addition to all the variables passed to C<if-up> scripts, the following |
| 416 |
environment variables will be set (values are just examples): |
| 417 |
|
| 418 |
=over 4 |
| 419 |
|
| 420 |
=item DESTNODE=branch2 |
| 421 |
|
| 422 |
The name of the remote node. |
| 423 |
|
| 424 |
=item DESTID=2 |
| 425 |
|
| 426 |
The node id of the remote node. |
| 427 |
|
| 428 |
=item DESTSI=rawip/88.99.77.55:0 |
| 429 |
|
| 430 |
The "socket info" of the target node, protocol dependent but usually in |
| 431 |
the format protocol/ip:port. |
| 432 |
|
| 433 |
=item DESTIP=188.13.66.8 |
| 434 |
|
| 435 |
The numerical IP address of the remote node (gvpe accepts connections from |
| 436 |
everywhere, as long as the other node can authenticate itself). |
| 437 |
|
| 438 |
=item DESTPORT=655 # deprecated |
| 439 |
|
| 440 |
The protocol port used by the other side, if applicable. |
| 441 |
|
| 442 |
=item STATE=up |
| 443 |
|
| 444 |
Node-up scripts get called with STATE=up, node-change scripts get called |
| 445 |
with STATE=change and node-down scripts get called with STATE=down. |
| 446 |
|
| 447 |
=back |
| 448 |
|
| 449 |
Here is a nontrivial example that uses nsupdate to update the name => ip |
| 450 |
mapping in some DNS zone: |
| 451 |
|
| 452 |
#!/bin/sh |
| 453 |
{ |
| 454 |
echo update delete $DESTNODE.lowttl.example.net. a |
| 455 |
echo update add $DESTNODE.lowttl.example.net. 1 in a $DESTIP |
| 456 |
echo |
| 457 |
} | nsupdate -d -k $CONFBASE:key.example.net. |
| 458 |
|
| 459 |
=item node-change = relative-or-absolute-path |
| 460 |
|
| 461 |
Same as C<node-change>, but gets called whenever something about a |
| 462 |
connection changes (such as the source IP address). |
| 463 |
|
| 464 |
=item node-down = relative-or-absolute-path |
| 465 |
|
| 466 |
Same as C<node-up>, but gets called whenever a connection is lost. |
| 467 |
|
| 468 |
=item pid-file = path |
| 469 |
|
| 470 |
The path to the pid file to check and create |
| 471 |
(default: C<LOCALSTATEDIR/run/gvpe.pid>). The first C<%s> is replaced by |
| 472 |
the nodename - any other use of C<%> must be written as C<%%>. |
| 473 |
|
| 474 |
=item private-key = relative-path-to-key |
| 475 |
|
| 476 |
Sets the path (relative to the config directory) to the private key |
| 477 |
(default: C<hostkey>). This is a printf format string so every C<%> must |
| 478 |
be doubled. A single C<%s> is replaced by the hostname, so you could use |
| 479 |
paths like C<hostkeys/%s> to be able to share the same config directory |
| 480 |
between nodes. |
| 481 |
|
| 482 |
Since only the private key file of the current node is used and the |
| 483 |
private key file should be kept secret per-node to avoid spoofing, it is |
| 484 |
not recommended to use this feature this way though. |
| 485 |
|
| 486 |
=item rekey = seconds |
| 487 |
|
| 488 |
Sets the rekeying interval in seconds (default: C<3607>). Connections are |
| 489 |
reestablished every C<rekey> seconds, making them use a new encryption |
| 490 |
key. |
| 491 |
|
| 492 |
=item seed-device = path |
| 493 |
|
| 494 |
The random device used to initially and regularly seed the random |
| 495 |
number generator (default: F</dev/urandom>). Randomness is of paramount |
| 496 |
importance to the security of the algorithms used in gvpe. |
| 497 |
|
| 498 |
On program start and every seed-interval, gvpe will read 64 octets. |
| 499 |
|
| 500 |
Setting this path to the empty string will disable this functionality |
| 501 |
completely (the underlying crypto library will likely look for entropy |
| 502 |
sources on it's own though, so not all is lost). |
| 503 |
|
| 504 |
=item seed-interval = seconds |
| 505 |
|
| 506 |
The number of seconds between reseeds of the random number generator |
| 507 |
(default: C<3613>). A value of C<0> disables this regular reseeding. |
| 508 |
|
| 509 |
=item serial = string |
| 510 |
|
| 511 |
The configuration serial number. This can be any string up to 16 bytes |
| 512 |
length. Only when the serial matches on both sides of a connection will |
| 513 |
the connection succeed. This is I<not> a security mechanism and eay to |
| 514 |
spoof, this mechanism exists to alert users that their config is outdated. |
| 515 |
|
| 516 |
It's recommended to specify this is a date string such as C<2013-05-05> or |
| 517 |
C<20121205084417>. |
| 518 |
|
| 519 |
The exact algorithm is as this: if a connection request is received form a |
| 520 |
node with an identical serial, then it succeeds normally. |
| 521 |
|
| 522 |
If the remote serial is lower than the local serial, it is ignored. |
| 523 |
|
| 524 |
If the remote serial is higher than the local serial, a warning message is |
| 525 |
logged. |
| 526 |
|
| 527 |
=back |
| 528 |
|
| 529 |
=head2 NODE SPECIFIC SETTINGS |
| 530 |
|
| 531 |
The following settings are node-specific, that is, every node can have |
| 532 |
different settings, even within the same gvpe instance. Settings that are |
| 533 |
set before the first node section set the defaults, settings that are |
| 534 |
set within a node section only apply to the given node. |
| 535 |
|
| 536 |
=over 4 |
| 537 |
|
| 538 |
=item allow-direct = nodename |
| 539 |
|
| 540 |
Allow direct connections to this node. See C<deny-direct> for more info. |
| 541 |
|
| 542 |
=item compress = yes|true|on | no|false|off |
| 543 |
|
| 544 |
For the current node, this specified whether it will accept compressed |
| 545 |
packets, and for all other nodes, this specifies whether to try to |
| 546 |
compress data packets sent to this node (default: C<yes>). Compression is |
| 547 |
really cheap even on slow computers, has no size overhead at all and will |
| 548 |
only be used when the other side supports compression, so enabling this is |
| 549 |
often a good idea. |
| 550 |
|
| 551 |
=item connect = ondemand | never | always | disabled |
| 552 |
|
| 553 |
Sets the connect mode (default: C<always>). It can be C<always> (always |
| 554 |
try to establish and keep a connection to the given node), C<never> |
| 555 |
(never initiate a connection to the given host, but accept connections), |
| 556 |
C<ondemand> (try to establish a connection when there are outstanding |
| 557 |
packets in the queue and take it down after the keepalive interval) or |
| 558 |
C<disabled> (node is bad, don't talk to it). |
| 559 |
|
| 560 |
Routers will automatically be forced to C<always> unless they are |
| 561 |
C<disabled>, to ensure all nodes can talk to each other. |
| 562 |
|
| 563 |
=item deny-direct = nodename | * |
| 564 |
|
| 565 |
Deny direct connections to the specified node (or all nodes when C<*> |
| 566 |
is given). Only one node can be specified, but you can use multiple |
| 567 |
C<allow-direct> and C<deny-direct> statements. This only makes sense in |
| 568 |
networks with routers, as routers are required for indirect connections. |
| 569 |
|
| 570 |
Sometimes, a node cannot reach some other nodes for reasons of network |
| 571 |
connectivity. For example, a node behind a firewall that only allows |
| 572 |
connections to/from a single other node in the network. In this case one |
| 573 |
should specify C<deny-direct = *> and C<allow-direct = othernodename> (the other |
| 574 |
node I<must> be a router for this to work). |
| 575 |
|
| 576 |
The algorithm to check whether a connection may be direct is as follows: |
| 577 |
|
| 578 |
1. Other node mentioned in an C<allow-direct>? If yes, allow the connection. |
| 579 |
|
| 580 |
2. Other node mentioned in a C<deny-direct>? If yes, deny direct connections. |
| 581 |
|
| 582 |
3. Allow the connection. |
| 583 |
|
| 584 |
That is, C<allow-direct> takes precedence over C<deny-direct>. |
| 585 |
|
| 586 |
The check is done in both directions, i.e. both nodes must allow a direct |
| 587 |
connection before one is attempted, so you only need to specify connect |
| 588 |
limitations on one node. |
| 589 |
|
| 590 |
=item dns-domain = domain-suffix |
| 591 |
|
| 592 |
The DNS domain suffix that points to the DNS tunnel server for this node. |
| 593 |
|
| 594 |
The domain must point to a NS record that points to the I<dns-hostname>, |
| 595 |
i.e. |
| 596 |
|
| 597 |
dns-domainname = tunnel.example.net |
| 598 |
dns-hostname = tunnel-server.example.net |
| 599 |
|
| 600 |
Corresponds to the following DNS entries in the C<example.net> domain: |
| 601 |
|
| 602 |
tunnel.example.net. NS tunnel-server.example.net. |
| 603 |
tunnel-server.example.net. A 13.13.13.13 |
| 604 |
|
| 605 |
=item dns-hostname = hostname/ip |
| 606 |
|
| 607 |
The address to bind the DNS tunnel socket to, similar to the C<hostname>, |
| 608 |
but for the DNS tunnel protocol only. Default: C<0.0.0.0>, but that might |
| 609 |
change. |
| 610 |
|
| 611 |
=item dns-port = port-number |
| 612 |
|
| 613 |
The port to bind the DNS tunnel socket to. Must be C<53> on DNS tunnel servers. |
| 614 |
|
| 615 |
=item enable-dns = yes|true|on | no|false|off |
| 616 |
|
| 617 |
See gvpe.protocol(7) for a description of the DNS transport |
| 618 |
protocol. Avoid this protocol if you can. |
| 619 |
|
| 620 |
Enable the DNS tunneling protocol on this node, either as server or as |
| 621 |
client. Support for this transport protocol is only available when gvpe |
| 622 |
was compiled using the C<--enable-dns> option. |
| 623 |
|
| 624 |
=item enable-icmp = yes|true|on | no|false|off |
| 625 |
|
| 626 |
See gvpe.protocol(7) for a description of the ICMP transport protocol. |
| 627 |
|
| 628 |
Enable the ICMP transport using ICMP packets of type C<icmp-type> on this |
| 629 |
node. |
| 630 |
|
| 631 |
=item enable-rawip = yes|true|on | no|false|off |
| 632 |
|
| 633 |
See gvpe.protocol(7) for a description of the RAW IP transport protocol. |
| 634 |
|
| 635 |
Enable the RAW IPv4 transport using the C<ip-proto> protocol |
| 636 |
(default: C<no>). |
| 637 |
|
| 638 |
=item enable-tcp = yes|true|on | no|false|off |
| 639 |
|
| 640 |
See gvpe.protocol(7) for a description of the TCP transport protocol. |
| 641 |
|
| 642 |
Enable the TCPv4 transport using the C<tcp-port> port |
| 643 |
(default: C<no>). Support for this transport protocol is only available |
| 644 |
when gvpe was compiled using the C<--enable-tcp> option. |
| 645 |
|
| 646 |
=item enable-udp = yes|true|on | no|false|off |
| 647 |
|
| 648 |
See gvpe.protocol(7) for a description of the UDP transport protocol. |
| 649 |
|
| 650 |
Enable the UDPv4 transport using the C<udp-port> port (default: C<no>). |
| 651 |
|
| 652 |
=item hostname = hostname | ip [can not be defaulted] |
| 653 |
|
| 654 |
Forces the address of this node to be set to the given DNS hostname or IP |
| 655 |
address. It will be resolved before each connect request, so dyndns should |
| 656 |
work fine. If this setting is not specified and a router is available, |
| 657 |
then the router will be queried for the address of this node. Otherwise, |
| 658 |
the connection attempt will fail. |
| 659 |
|
| 660 |
Note that DNS resolving is done synchronously, pausing the daemon. If that |
| 661 |
is an issue you need to specify IP addresses. |
| 662 |
|
| 663 |
=item icmp-type = integer |
| 664 |
|
| 665 |
Sets the type value to be used for outgoing (and incoming) packets sent |
| 666 |
via the ICMP transport. |
| 667 |
|
| 668 |
The default is C<0> (which is C<echo-reply>, also known as |
| 669 |
"ping-reply"). Other useful values include C<8> (C<echo-request>, a.k.a. |
| 670 |
"ping") and C<11> (C<time-exceeded>), but any 8-bit value can be used. |
| 671 |
|
| 672 |
=item if-up-data = value |
| 673 |
|
| 674 |
The value specified using this directive will be passed to the C<if-up> |
| 675 |
script in the environment variable C<IFUPDATA>. |
| 676 |
|
| 677 |
=item inherit-tos = yes|true|on | no|false|off |
| 678 |
|
| 679 |
Whether to inherit the TOS settings of packets sent to the tunnel when |
| 680 |
sending packets to this node (default: C<yes>). If set to C<yes> then |
| 681 |
outgoing tunnel packets will have the same TOS setting as the packets sent |
| 682 |
to the tunnel device, which is usually what you want. |
| 683 |
|
| 684 |
=item low-power = yes|true|on | no|false|off |
| 685 |
|
| 686 |
If true, designates a node as a low-power node. Low-power nodes use |
| 687 |
larger timeouts and try to reduce cpu time. Other nodes talking to a |
| 688 |
low-power node will also use larger timeouts, and will use less aggressive |
| 689 |
optimisations, in the hope of reducing load. Security is not compromised. |
| 690 |
|
| 691 |
The typical low-power node would be a mobile phone, where wakeups and |
| 692 |
encryption can significantly increase power drain. |
| 693 |
|
| 694 |
=item max-retry = positive-number |
| 695 |
|
| 696 |
The maximum interval in seconds (default: C<3600>, one hour) between |
| 697 |
retries to establish a connection to this node. When a connection cannot |
| 698 |
be established, gvpe uses exponential back-off capped at this value. It's |
| 699 |
sometimes useful to set this to a much lower value (e.g. C<120>) on |
| 700 |
connections to routers that usually are stable but sometimes are down, to |
| 701 |
assure quick reconnections even after longer downtimes. |
| 702 |
|
| 703 |
=item max-ttl = seconds |
| 704 |
|
| 705 |
Expire packets that couldn't be sent after this many seconds |
| 706 |
(default: C<60>). Gvpe will normally queue packets for a node without an |
| 707 |
active connection, in the hope of establishing a connection soon. This |
| 708 |
value specifies the maximum lifetime a packet will stay in the queue, if a |
| 709 |
packet gets older, it will be thrown away. |
| 710 |
|
| 711 |
=item max-queue = positive-number>=1 |
| 712 |
|
| 713 |
The maximum number of packets that will be queued (default: C<512>) |
| 714 |
for this node. If more packets are sent then earlier packets will be |
| 715 |
expired. See C<max-ttl>, above. |
| 716 |
|
| 717 |
=item router-priority = 0 | 1 | positive-number>=2 |
| 718 |
|
| 719 |
Sets the router priority of the given node (default: C<0>, disabled). |
| 720 |
|
| 721 |
If some node tries to connect to another node but it doesn't have a |
| 722 |
hostname, it asks a router node for it's IP address. The router node |
| 723 |
chosen is the one with the highest priority larger than C<1> that is |
| 724 |
currently reachable. This is called a I<mediated> connection, as the |
| 725 |
connection itself will still be direct, but it uses another node to |
| 726 |
mediate between the two nodes. |
| 727 |
|
| 728 |
The value C<0> disables routing, that means if the node receives a packet |
| 729 |
not for itself it will not forward it but instead drop it. |
| 730 |
|
| 731 |
The special value C<1> allows other hosts to route through the router |
| 732 |
host, but they will never route through it by default (i.e. the config |
| 733 |
file of another node needs to specify a router priority higher than one |
| 734 |
to choose such a node for routing). |
| 735 |
|
| 736 |
The idea behind this is that some hosts can, if required, bump the |
| 737 |
C<router-priority> setting to higher than C<1> in their local config to |
| 738 |
route through specific hosts. If C<router-priority> is C<0>, then routing |
| 739 |
will be refused, so C<1> serves as a "enable, but do not use by default" |
| 740 |
switch. |
| 741 |
|
| 742 |
Nodes with C<router-priority> set to C<2> or higher will always be forced |
| 743 |
to C<connect> = C<always> (unless they are C<disabled>). |
| 744 |
|
| 745 |
=item tcp-port = port-number |
| 746 |
|
| 747 |
Similar to C<udp-port> (default: C<655>), but sets the TCP port number. |
| 748 |
|
| 749 |
=item udp-port = port-number |
| 750 |
|
| 751 |
Sets the port number used by the UDP protocol (default: C<655>, not |
| 752 |
officially assigned by IANA!). |
| 753 |
|
| 754 |
=back |
| 755 |
|
| 756 |
=head1 CONFIG DIRECTORY LAYOUT |
| 757 |
|
| 758 |
The default (or recommended) directory layout for the config directory is: |
| 759 |
|
| 760 |
=over 4 |
| 761 |
|
| 762 |
=item gvpe.conf |
| 763 |
|
| 764 |
The config file. |
| 765 |
|
| 766 |
=item if-up |
| 767 |
|
| 768 |
The if-up script |
| 769 |
|
| 770 |
=item node-up, node-down |
| 771 |
|
| 772 |
If used the node up or node-down scripts. |
| 773 |
|
| 774 |
=item hostkey |
| 775 |
|
| 776 |
The (default path of the) private key of the current host. |
| 777 |
|
| 778 |
=item pubkey/nodename |
| 779 |
|
| 780 |
The public keys of the other nodes, one file per node. |
| 781 |
|
| 782 |
=back |
| 783 |
|
| 784 |
=head1 SEE ALSO |
| 785 |
|
| 786 |
gvpe(5), gvpe(8), gvpectrl(8). |
| 787 |
|
| 788 |
=head1 AUTHOR |
| 789 |
|
| 790 |
Marc Lehmann <gvpe@schmorp.de> |
| 791 |
|