Search code examples
network-programmingrsync

How to bind rsync to a specific interface?


I have a lot of interfaces configured in my server, each of which connect to a specific nic card and have a separate routing table. These interfaces can be identified by "netstat -a" command.

Now, I want to execute the rsync command connecting only to specific interface. I have this requirement because each of the interfaces will go through a separate tunnel/path and I want a particular rsync command to sync files through a specified tunnel.

Specifically, I want a way to specify the interface name.

Thanks, Mohan.


Solution

  • You can specify the address of the interface using --address=x.x.x.x on the command-line.

    I don't think there is any way to specify the interface directly, but the ip command can tell you the address for an interface, so you could use something like this:

    IP=$(ip -4 -br addr show eth0 | awk '{split($3,a,"/"); print a[1]}')
    rsyncd ... --address=$IP
    

    Edit For systems with the "real" iproute2 (anything not busybox-based, essentially), ip can produce JSON output which can be parsed a bit more sanely:

    IP=$(ip -j -4 addr show wlo1 | jq .[0].addr_info[0].local)
    rsyncd ... --address=$IP