Josh Fisher wrote: > Dan Langille wrote: >> On 6 Oct 2006 at 11:49, Martin Simmons wrote: >> >> >>>>>>>> On Thu, 05 Oct 2006 16:28:59 -0400, Dan Langille said: >>>>>>>> >>>> Priority: normal >>>> Content-description: Mail message body >>>> >>>> On 5 Oct 2006 at 21:13, Martin Simmons wrote: >>>> >>>> >>>>>>>>>> On Thu, 05 Oct 2006 14:16:14 -0400, Dan Langille said: >>>>>>>>>> >>>>>> Priority: normal >>>>>> Content-description: Mail message body >>>>>> >>>>>> On 5 Oct 2006 at 19:10, Martin Simmons wrote: >>>>>> >>>>>> >>>>>>>>>>>> On Thu, 05 Oct 2006 12:52:44 -0400, Dan Langille said: >>>>>>>>>>>> >>>>>>>> Priority: normal >>>>>>>> Content-description: Mail message body >>>>>>>> >>>>>>>> On 5 Oct 2006 at 17:27, James Ray wrote: >>>>>>>> >>>>>>>> >>>>>>>>> Dan Langille wrote: >>>>>>>>> >>>>>>>>>> On 5 Oct 2006 at 16:42, James Ray wrote: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> Dan Langille wrote: >>>>>>>>>>> >>>>>>>>>>>> On 5 Oct 2006 at 16:29, James Ray wrote: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> Dan Langille wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> On 5 Oct 2006 at 15:36, James Ray wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Dan Langille wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On 5 Oct 2006 at 9:11, Bill Moran wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I haven't had time to investigate whether the >>>>>>>>>>>>>>>>> [FD|SD|DIR]Address sets >>>>>>>>>>>>>>>>> both the listening and the outgoing address, but a firewall >>>>>>>>>>>>>>>>> audit is >>>>>>>>>>>>>>>>> on the TODO list, and when I finally get to it, I'll have to >>>>>>>>>>>>>>>>> address >>>>>>>>>>>>>>>>> this for a number of services, not only Bacula. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> My testing today shows that is sets both listening and >>>>>>>>>>>>>>>> outgoing. All >>>>>>>>>>>>>>>> I tested was a status command. Nothing more. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Well, that doesn't seem to be the case on my linux (FC5) >>>>>>>>>>>>>>> machine. :( >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> The LISTEN addresses are right but the address the >>>>>>>>>>>>>>> communications spawn >>>>>>>>>>>>>>> from is the base system address. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> tcp 0 0 xxx.xxx.x.49:9101 0.0.0.0:* >>>>>>>>>>>>>>> LISTEN 100 9291 3056/bacula-dir >>>>>>>>>>>>>>> tcp 0 0 xxx.xxx.x.49:9103 0.0.0.0:* >>>>>>>>>>>>>>> LISTEN 0 9239 3011/bacula-sd >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Then run a status client command with the following ngrep >>>>>>>>>>>>>>> running (I >>>>>>>>>>>>>>> shouldn't see any data) >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> [EMAIL PROTECTED] bacula]# ngrep "" "src host xxx.xxx.x.48 and >>>>>>>>>>>>>>> dst host >>>>>>>>>>>>>>> xxx.xxx.x.3" >>>>>>>>>>>>>>> interface: eth0 (xxx.xxx.x.0/255.255.254.0) >>>>>>>>>>>>>>> filter: (ip) and ( src host xxx.xxx.x.48 and dst host >>>>>>>>>>>>>>> xxx.xxx.x.3 ) >>>>>>>>>>>>>>> 114 received, 0 dropped >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> And I see the following in netstat: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> tcp 0 0 xxx.xxx.x.48:53286 >>>>>>>>>>>>>>> xxx.xxx.x.3:9102 >>>>>>>>>>>>>>> TIME_WAIT 0 0 - >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> :( >>>>>>>>>>>>>>> >>>>>>>>>>>>>> Without the corrresponding configuration file, I cannot comment. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> Director{} resource from bacula-dir.conf >>>>>>>>>>>>> Director { # define myself >>>>>>>>>>>>> Name = bacula-dir >>>>>>>>>>>>> DIRport = 9101 # where we listen for UA >>>>>>>>>>>>> connections >>>>>>>>>>>>> QueryFile = "/etc/bacula/query.sql" >>>>>>>>>>>>> WorkingDirectory = "/var/bacula/working" >>>>>>>>>>>>> PidDirectory = "/var/bacula/run" >>>>>>>>>>>>> Maximum Concurrent Jobs = 8 >>>>>>>>>>>>> Password = <REMOVED> # Console password >>>>>>>>>>>>> Messages = Daemon >>>>>>>>>>>>> DirAddress = xxx.xxx.x.49 >>>>>>>>>>>>> } >>>>>>>>>>>>> >>>>>>>>>>>> This tells the FD that only the given DIR may connect. This does >>>>>>>>>>>> not >>>>>>>>>>>> tell the FD where it should listen. To tell the FD how to listen, >>>>>>>>>>>> here is what I did: >>>>>>>>>>>> >>>>>>>>>>>> FileDaemon { >>>>>>>>>>>> Name = ngaio-fd >>>>>>>>>>>> FDport = 9102 >>>>>>>>>>>> WorkingDirectory = /home/bacula/db >>>>>>>>>>>> Pid Directory = /var/run >>>>>>>>>>>> Maximum Concurrent Jobs = 20 >>>>>>>>>>>> >>>>>>>>>>>> FDAddress = 192.168.0.68; >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> This is an extract from the bacula-fd.conf file. >>>>>>>>>>>> >>>>>>>>>>>> The FDAddress directive tells the FD to listen (and answer) only >>>>>>>>>>>> on >>>>>>>>>>>> that given address. >>>>>>>>>>>> >>>>>>>>>>>> I think you know what to do now... ;) >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> I think you are confused.... >>>>>>>>>>> The FD is listening on another machine on the correct IP address, >>>>>>>>>>> its >>>>>>>>>>> the Director that is talking out of the the 'wrong' (for want of a >>>>>>>>>>> better name) IP address. >>>>>>>>>>> >>>>>>>>>>> The server where the director is running has two interfaces (one >>>>>>>>>>> phyiscal one virtual), of .48 and .49, I want it to talk out of the >>>>>>>>>>> .49 >>>>>>>>>>> IP addresses, however it sends out communications from the .48 IP >>>>>>>>>>> address. >>>>>>>>>>> >>>>>>>>>>> Does that clear it up? (confusing I know!) >>>>>>>>>>> >>>>>>>>>> I just tested this with the latest BETA code (for bacula-dir; >>>>>>>>>> bconsole was 1.38.11, but I do not think that will affect these >>>>>>>>>> results). >>>>>>>>>> >>>>>>>>>> The bacula-dir config: >>>>>>>>>> >>>>>>>>>> Director { # define myself >>>>>>>>>> Name = ngaio-dir >>>>>>>>>> DIRport = 9101 # where we listen for UA connections >>>>>>>>>> QueryFile = "/usr/local/share/bacula/query.sql" >>>>>>>>>> WorkingDirectory = "/home/bacula/db" >>>>>>>>>> PidDirectory = "/var/run" >>>>>>>>>> Maximum Concurrent Jobs = 3 >>>>>>>>>> Password = "****" # Console password >>>>>>>>>> Messages = Daemon >>>>>>>>>> >>>>>>>>>> DirAddress = 192.168.0.68 >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> The bconsole.conf: >>>>>>>>>> >>>>>>>>>> Director { >>>>>>>>>> Name = ngaio-dir >>>>>>>>>> DIRport = 9101 >>>>>>>>>> Address = 192.168.0.68 >>>>>>>>>> # address = ngaio >>>>>>>>>> Password = "***" >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> Connecting thusly: >>>>>>>>>> >>>>>>>>>> $ bconsole -c ~/bconsole.conf >>>>>>>>>> Connecting to Director 192.168.0.68:9101 >>>>>>>>>> 1000 OK: ngaio-dir Version: 1.39.24 (02 October 2006) >>>>>>>>>> Enter a period to cancel a command. >>>>>>>>>> * >>>>>>>>>> >>>>>>>>>> All comms went via 192.168.0.68 >>>>>>>>>> >>>>>>>>>> Monitored like this: >>>>>>>>>> >>>>>>>>>> sudo tcpdump -ni fxp0 port 9101 | grep -v 10.55.0.68 >>>>>>>>>> >>>>>>>>>> Any questions? I'll answer. >>>>>>>>>> >>>>>>>>>> I used the beta because it was already installed on this machine. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> Make an outgoing command to a client and see what IP address that >>>>>>>>> comes >>>>>>>>> from... something like a status client=blah should work. >>>>>>>>> >>>>>>>>> The Outgoing IP address will be your system default address. >>>>>>>>> >>>>>>>> Done. Nothing caught by the above (and repeated below) filter. I >>>>>>>> also tried running a job. Nothing out on the the primary IP address. >>>>>>>> The filter is: >>>>>>>> >>>>>>>> tcpdump -ni fxp0 port 9101 | grep -v 10.55.0.68 >>>>>>>> >>>>>>>> The ifconfig is: >>>>>>>> >>>>>>>> $ ifconfig fxp0 >>>>>>>> fxp0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu >>>>>>>> 1500 >>>>>>>> options=8<VLAN_MTU> >>>>>>>> inet6 fe80::204:acff:fea3:703d%fxp0 prefixlen 64 scopeid 0x1 >>>>>>>> inet 10.55.0.67 netmask 0xffffff00 broadcast 10.55.0.255 >>>>>>>> inet 10.55.0.68 netmask 0xffffffff broadcast 10.55.0.68 >>>>>>>> ether 00:04:ac:a3:70:3d >>>>>>>> media: Ethernet autoselect (100baseTX <full-duplex>) >>>>>>>> status: active >>>>>>>> >>>>>>> From your results, it looks to me like the Director didn't bind the >>>>>>> source IP address when connecting to the client. Right? >>>>>>> >>>>>> I do not understand what you are saying. :) >>>>>> >>>>> I thought you were an expert by using tcpdump :-) >>>>> >>>> ;) >>>> >>>> >>>>> Assuming that 10.55.0.68 and 192.168.0.68 are somehow related, your >>>>> primary IP >>>>> >>>> Yes, sorry, my error. They should be the same address. >>>> >>>> >>>>> address is 10.55.0.67 and your alias is 10.55.0.68. >>>>> >>>> Correct. >>>> >>>> >>>>> You said "Nothing caught by the above" when looking for 10.55.0.68 in >>>>> the tcpdump. >>>>> >>>> The dump is: tcpdump -ni fxp0 port 9101 | grep -v 10.55.0.68 >>>> >>>> Which means, show me everything on device fxp0 for port 9101. Then >>>> the grep ignores everything to/from 10.55.0.68. The only stuff that >>>> should be displayed will be traffic not to or from 10.55.0.68, which >>>> leaves the primary. So any possible output must be port 9101 on the >>>> primary IP address. >>>> >>>> I think the confusion is my choice of words: "nothing caught"... >>>> >>>> >>>>> so I assume that the traffic is on the primary IP address instead >>>>> (though for the client test you need to change the port number in >>>>> tcpdump of course). You could probably check this with something like >>>>> >>>>> tcpdump -ni fxp0 port 9102 | grep -v 10.55.0.67 >>>>> >>>> That would show only traffic not from the primary. >>>> >>> Doh, right, I missed (and copied!) the -v option. >>> >>> In that case, I don't understand it because I don't see any code in Bacula >>> to >>> bind the local address before calling connect(2). >>> >>> > > That is not a common thing for a client to do. It makes more sense to > leave routing decisions up to the kernel. Normally, a client allows the > kernel to select both interface and port for the client socket. Some > clients allow binding to a particular port when needed for firewall > reasons. For example, named can be configured to bind its client socket > to port 53 when making client connections to a remote DNS server, but it > still doesn't bind to a particular interface as that would restrict routing. > > I think this would have to be a feature request and a decision would > have to be made whether or not to implement it. > >>> While the director is connected to the client, if you run netstat -n (on >>> both >>> machines) does it confirm that the connection comes from 10.55.0.68? And >>> this >>> changes if you change the Director's config to listen only on 10.55.0.67? >>> >> Director connected to the client in what way? The following were >> taken while a job was running. >> >> On the FD: >> >> # netstat -n | grep 910 >> tcp4 0 2497 10.55.0.23.3816 10.55.0.67.9103 >> ESTABLISHED >> >> Connection from the local FD to the remote SD >> >> tcp4 0 0 10.55.0.23.9102 10.55.0.67.52459 >> ESTABLISHED >> >> Connection to the local FD, but I don't know what from. >> >> tcp4 0 0 10.55.0.23.2831 10.55.0.68.9101 >> ESTABLISHED >> >> Connection from local bconsole to Director >> >> >> And on the Director >> >> # netstat -n | grep 910 >> tcp4 66182 0 10.55.0.67.9103 10.55.0.23.3816 >> ESTABLISHED >> tcp4 0 0 10.55.0.67.52459 10.55.0.23.9102 >> ESTABLISHED >> tcp4 0 0 10.55.0.67.9103 10.55.0.67.56424 >> ESTABLISHED >> tcp4 0 300 10.55.0.67.56424 10.55.0.67.9103 >> ESTABLISHED >> tcp4 0 0 10.55.0.68.9101 10.55.0.23.2831 >> ESTABLISHED >> >> >> >> The problem with my tcpdump is it looks only for traffic on 9101, >> which would be incoming connections to the DIR. I was not looking >> for outgoing connections from the DIR. >> >> >> Yes, the DIR is initiating outgoing connections on an IP address not >> specified in the Director resource of the bacula-dir.conf >> configuration file. >> >> > > Which is normal behavior. The port and address(es) that the server > listens on has nothing to do with the port and address a client socket > is bound to when making a client connection to a server. Those are > normally assigned by kernel routing. As James Harper mentioned > previously, the routing table is where this sort of routing assignment > should be made. His post shows clearly how to assign a preferred source > address to a particular route. >
I don't really see this as a 'routing' decision though. Lets take proftpd as an example here. Now I connect to proftpd that is running on a system with virtual interfaces, proftpd's listening port is bound to one interface which is a virtual one... Now I have passive mode turned on and I do an 'ls' command, at which point the FTP server opens a connection to my client _from the virtual interfaces IP address_. This just wouldn't work at all if I go a connection coming from the machines physical 'default' IP address. All I want is for when I connect to a client from the director that it uses a defined IP address rather than me Source NATing or doing other evil routing things. I don't want to always talk to these machines from the virtual interface either so the routing tricks aren't really feasible. I want all my normal communications (sshing outwards, blah blah blah) to come from the 'default' IP address, but I want bacula to come from its service IP address which isn't the default one. -- James Ray. <[EMAIL PROTECTED]> Computing Services Queen Mary, University of London ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users