Re: Request for TEXT: [LARTC] "onlink" option for ip route

Linux Advanced Routing and Traffic Control

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

 



I'll try to give an example to see what the onlink option really does:

You have configured eth0 (on your machine) with an ip address/mask: 192.168.0.1/24

For some reason, you want to use a gateway on the physical LAN of eth0
which has an inconsistent configuration. Assume it has an address 10.0.10.1/24, which does not match the 192.168.0.1/24 configuration you gave your own machine.


If you say:

ip route add default dev eth0 via 10.0.10.1

then you will get an error response (network unreachable or something).
Why? Because (strictly speaking) it does not make sense to have
a machine 10.0.10.1 on the eth0 lan, because you told your computer this lan's network address is 192.168.0.0/24.


But here it comes: if you add "onlink" to the command, like this:

ip route add default dev eth0 via 10.0.10.1 onlink

then the route is accepted.

But now we come to another question: What does the kernel do if a packet has to routed to this "onlink" gateway? I checked (by experiment), and this is the result:
The kernel sends an arp request on the eth0-lan asking "who-has 10.0.10.1", which is the "onlink" gateway you configured. When it receives a response, he has a MAC address where he can send his packets to and routing will be performed.


This means: when the gateway's address doesn't match the lan configuration on your computer (eth0), you can force the kernel to use
this gateway by adding "onlink" to the statement.


I guess there very rare situations where you have to use this feature.
Situations where you need the onlink option will mostly be a case of poor network design... I don't think the average tunnel setup needs "onlink" either.


Regards,
Guy

bert hubert wrote:

On Sun, Mar 25, 2001 at 12:43:07AM -0300, Rogerio Brito wrote:

On Mar 24 2001, bert hubert wrote:

If someone manages to write a reasonable explanation for the
'onlink' option, I'll put it in the HOWTO ASAP.

As far as I understand it, the situation is as follows:


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Sometimes, you may want to send packets via a machine
	(i.e., a gateway) which is physically connected to your
	network, but to which you don't specifically have a route in
	your kernel routing table.


I'm more confused then ever!

Alexey says this: A: Yes, in 2.2 the rule that {\em normal} gateway must reside on directly
connected network has not any exceptions. You may tell kernel, that
this particular route is {\em abnormal}:
\begin{verbatim} ifconfig tunl0 10.0.0.1 netmask 255.255.255.255
ip route add 10.0.0.0/8 via 193.233.7.65 dev tunl0 onlink
\end{verbatim}
Note keyword \verb|onlink|, it is the magic key that orders kernel
not to check for consistency of gateway address.
Probably, after this explanation you have already guessed another method
to cheat kernel:
\begin{verbatim} ifconfig tunl0 10.0.0.1 netmask 255.255.255.255
route add -host 193.233.7.65 dev tunl0
route add -net 10.0.0.0 netmask 255.0.0.0 gw 193.233.7.65
route del -host 193.233.7.65 dev tunl0
\end{verbatim}
Well, if you like such tricks, nobody may prohibit you to use them.
Only do not forget
that between \verb|route add| and \verb|route del| host 193.233.7.65 is
unreachable.


However, our HOWTO says this:

 ip tunnel add netb mode gre remote 172.19.20.21 local 172.16.17.18 ttl 255
 ip link set netb up
 ip addr add 10.0.1.1 dev netb
 ip route add 10.0.2.0/24 dev netb

We don't use onlink - might it be that 'onlink' is only useful for ipip
tunnels?


	Please let me know if this is acceptable. I could write with
	more details (giving a more concrete example), but I'm very
	busy right now. :-(


Once this is cleared up, your text will do fine. Thanks!

Regards,

bert





[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux