UDP packet transmission
bc979 at lafn.org
Fri May 4 04:05:11 UTC 2018
I have a somewhat unusual situation and have not found a solution for it. I have a remote machine running 12 current. It has two independent internet connections. They are from two different sources and have different IP addresses. One is a fixed IP address and the other dynamic. The purpose is to be able to access the device if one of those interfaces is down. It is only accessed when problems occur. Typically that is when the fixed address is not accessible. The problem is there is no way to know the dynamic address.
To address this, I tried sending a UDP packet through the dynamic IP link to another machine at a fixed IP address. It records the IP address that originated the packet and logs it. Hence, I can easily find the last dynamic IP that was used and access the device through that. However, to make that happen, I need to be able to send a UDP packet that goes through a specific interface and does not use the routing table.
The most frequent approach I have found is to bind the socket to only the dynamic IP address's interface. However, that does change the originating IP address in the packet to that interface, but continues to transmit via the interface found in the routing table.
Another suggestion was to use raw sockets. However, all the reading on that (Stevens et al) indicate that the packet will still be transmitted on the interface selected in the routing table.
Yet another suggestion was to change the routing table temporarily, send the packet, and then change it back. Besides a lot of potential for weird stuff, it would break a number of other connections going through the fixed IP address.
I am hoping there is another solution that would be better. Thanks,
More information about the freebsd-questions