Date: Fri, 15 Jun 2001 14:30:43 +0300 From: Ruslan Ermilov <ru@FreeBSD.ORG> To: Mike Petrov <mike@deyton.ru> Cc: freebsd-questions@FreeBSD.ORG Subject: Re: choosing correct source IP on multihomed hosts Message-ID: <20010615143043.C68695@sunbay.com> In-Reply-To: <267957031.20010615142235@deyton.ru>; from mike@deyton.ru on Fri, Jun 15, 2001 at 02:22:35PM %2B0400 References: <267957031.20010615142235@deyton.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Jun 15, 2001 at 02:22:35PM +0400, Mike Petrov wrote:
> Hello.
>
> How can I forcely say to any program to use certain source IP?
> Some programs allow to specify it - ping,traceroute,squid,etc.
> Many programs do not care about src IP and use ADDR_ANY when
> creating connections on socket. Kernel chooses appropriate IP
> address according to routing table. It chooses first IP of
> interface where packet would be routed.
>
Nope, the primary selection (if the source address is unspecified)
is done by lookup to the routing table. For example:
# ifconfig rl0
rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.4.115 netmask 0xffffff00 broadcast 192.168.4.255
inet 192.168.100.2 netmask 0xffffff00 broadcast 192.168.100.255
# route -vn get 192.168.100.1
[...]
sockaddrs: <DST,GATEWAY,IFP,IFA>
192.168.100.1 0.d0.b7.16.9c.c6 rl0:0.c0.df.3.2d.79 192.168.100.2
^^^^^^^^^^^^^
# telnet 192.168.100.1 12345
Trying 192.168.100.1...
telnet: connect to address 192.168.100.1: Connection refused
telnet: Unable to connect to remote host
# tcpdump
192.168.100.2.49165 > 192.168.100.1.12345: S 3633843389:3633843389(0) win 16384 <mss 1460,nop,wscale 0,nop,nop,timestamp 307678 0> (DF) [tos 0x10]
192.168.100.1.12345 > 192.168.100.2.49165: R 0:0(0) ack 3633843390 win 0
# route change 192.168.100.1 -ifa 192.168.4.115
change host 192.168.100.1
# route -vn get 192.168.100.1
[...]
sockaddrs: <DST,GATEWAY,IFP,IFA>
192.168.100.1 0.d0.b7.16.9c.c6 rl0:0.c0.df.3.2d.79 192.168.4.115
^^^^^^^^^^^^^
# telnet 192.168.100.1 12345
Trying 192.168.100.1...
telnet: connect to address 192.168.100.1: Connection refused
telnet: Unable to connect to remote host
# tcpdump
192.168.4.115.49166 > 192.168.100.1.12345: S 3750128640:3750128640(0) win 16384 <mss 1460,nop,wscale 0,nop,nop,timestamp 318829 0> (DF) [tos 0x10]
192.168.100.1.12345 > 192.168.4.115.49166: R 0:0(0) ack 3750128641 win 0
> In most cases this is
> default interface. For example, normally program "telnet" uses
> IP of default interface, when I telnet to somewhere in Internet.
> But sometimes I want to force it to use another source IP.
> Good way to do it: make copy of it to "telnet2", change owner to
> special user, set SUID bit.But how set default interface _only_
> for this user to that I need?
>
See jail(8).
Cheers,
--
Ruslan Ermilov Oracle Developer/DBA,
ru@sunbay.com Sunbay Software AG,
ru@FreeBSD.org FreeBSD committer,
+380.652.512.251 Simferopol, Ukraine
http://www.FreeBSD.org The Power To Serve
http://www.oracle.com Enabling The Information Age
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010615143043.C68695>
