EXAMPLES
Configuration example:
Host X-- Host A ----------------tunnel---------- Cisco D------Host E
\ |
\/
+------Host B----------Host C----------+
On host A (Fx):
route add default B
ifconfig greN create
ifconfig greN A D netmask 0xffffffff linkX up
ifconfig greN tunnel A D
route add E D
On Host D (Cisco):
Interface TunnelX
ip unnumbered D ! e.g. address from Ethernet interface
tunnel source D ! e.g. address from Ethernet interface
tunnel destination A
ip route C <some interface and mask>
ip route A mask C
ip route X mask tunnelX
OR
On Host D (Fx):
route add default C
ifconfig greN create
ifconfig greN D A
ifconfig tunnel greN D A
If all goes well, you should see packets flowing ;-)
If you want to reach Host A over the tunnel (from Host D (Cisco)), then you have to have an alias on Host A for e.g. the Ethernet interface like:
"ifconfig <etherif> alias Y"
and on the Cisco:
"ip route Y mask tunnelX"
A similar setup can be used to create a link between two private networks (for example in the 192.168 subnet) over the Internet:
192.168.1.* --- Router A -------tunnel-------- Router B --- 192.168.2.*
\/
\ /
+------ the Internet ------+
Assuming router A has the (external) IP address A and the internal address 192.168.1.1, while router B has external address B and internal address 192.168.2.1, the following commands will configure the tunnel:
On router A:
ifconfig greN create
ifconfig greN 192.168.1.1 192.168.2.1 link1
ifconfig greN tunnel A B
route add -net 192.168.2 -netmask 255.255.255.0 192.168.2.1
On router B:
ifconfig greN create
ifconfig greN 192.168.2.1 192.168.1.1 link1
ifconfig greN tunnel B A
route add -net 192.168.1 -netmask 255.255.255.0 192.168.1.1
Note that this is a safe situation where the link1 flag (as discussed in the BUGS section below) may (and probably should) be set.
NOTES
The MTU of gre interfaces is set to 1476 by default, to match the value used by Cisco routers. This may not be an optimal value, depending on the link between the two tunnel endpoints. It can be adjusted via ifconfig(8). For correct operation, the gre device needs a route to the destination that is less specific than the one over the tunnel. (Basically, there needs to be a route to the decapsulating host that does not run over the tunnel, as this would be a loop.) If the addresses are ambiguous, doing the ifconfig tunnel step before the ifconfig(8) call to set the gre IP addresses will help to find a route outside the tunnel.
In order to tell ifconfig(8) to actually mark the interface as "up", the keyword up must be given last on its command line.
The kernel must be set to forward datagrams by setting the ip.forwarding sysctl(8) variable to non-zero.
SEE ALSO
gif(4), inet(4), ip(4), netintro(4), protocols(5), ifconfig(8),