On 2/12/2019 2:12 PM, mark.berg...@uphs.upenn.edu wrote:
We run the bacula-dir and bacula-sd (v9.4.1) on a CentOS6 server
with multiple network interfaces. I'm seeing a problem with a new client
that I believe is related to asymetric routing and maybe the use of the
server's IP to generate the MD5 CRAM digest.


Maybe to the problem being asymmetric routing (see below), no to the IP being used to calculate the digest.



Here's a simplified network diagram, best viewed with a fixed-width font:
[client 1] [client 2]
            |                 |
            |                 |
            |                 +-----------------------+
            |                 |                       |
       {192.168.1.0/24}    {172.16.1.0/24}            |
            |                 |                       |
            |                 |                       |
         ________________________________             |
        |  192.168.1.159   172.16.1.159 |             |
        |                               |             |
        | bacula-dir & bacula-sd server |             |
        |                               |             |
        |     10.20.0.159               |             |
        +-------------------------------+             |
                    |                                 |
                    |                                 |
               {10.20.0.0/16}                         |
                    |                                 |
                    +---------------+             {172.16.1.0/24}
                    |               |                 |
             _______|______      ___|__________       |
             |10.20.0.10  |      |  default GW |      |
             | new client |      |  NAT server |------+
             +------------+      +-------------+
Bacula is able to backup from legacy client1 and client2 machines with
no problem.

The client bacula-fd.conf files are identical on each client, except
for the Name field for the FileDaemon itself.

On the bacula server, 10.20.0.159 is a virtual (secondary) IP.

I've added a new client, on a new network (10.20.0.0/16). The new client
is single-homed, with a default route via a server that does NAT for
outbound traffic.

The bacula server is able to communicate with new_client via the 10.20.0.0 
network.

The new_client was initially able to communicate with the bacula server
through the default gateway and NAT to the bacula server at 172.16.1.159.

I have created iptables DNAT rules to rewrite outbound traffic from the
new_client that is destined for the bacula server on 172.16.1.159 so
that traffic goes to 10.20.0.159.


Why? If the bacula-dir/bacula-sd host has a 10.20.0.0 address, then why not just use the 10.20.0.0 network for all Bacula traffic between hosts on the 10.20.0.0 network? If the problem is that DNS is returning the 172.16.1.159 address for the Bacula server's hostname, then it is a DNS problem, rather than a networking problem, and no DNAT is required. Instead, put an entry for the Bacula server's hostname in new_client's /etc/hosts file, else fiddle with views in the Bind DNS config so that hosts on the 10.20.0.0 network get the 10.20.0.159 address, hosts on the 172.16.1.0 network get the 172.16.1.159 address, and hosts on the 192.168.1.0 network. get the 192.168.1.159 address.



Now, new_client sends all traffic to the bacula server server via 10.20.0.0.

I haven't looked at the source code, but I'm wondering if the problem is
not in the network traffic itself, but in the authentication challenge. Is
the challenge based on the bacula-dir server's hostname or IP?  It appears
as if the bacula server identifies itself as 172.16.1.159 but the client
sees traffic from the server on 10.20.0.159.

Here are the server & client debugging outputs:

------------- Server -----------------
      1 [root@bacula-server ~]# /opt/bacula/bin/bconsole
      2 Connecting to Director bacula-server:9101
      3 bacula-server: bsock.c:851-0 socket=8 who=client host=10.20.0.159 
port=63069
      4 bacula-server: job.c:1767-0 wstorage=neoxl80
      5 bacula-server: job.c:1776-0 wstore=neoxl80 where=Pool resource
      6 bacula-server: job.c:1430-0 JobId=0 created 
Job=-Console-.2019-02-11_18.42.49_02
      7 bacula-server: cram-md5.c:69-0 send: auth cram-md5 challenge 
<757376812.1549928569@bacula-server> ssl=0
      8 bacula-server: cram-md5.c:133-0 cram-get received: auth cram-md5 
<2004139279.1549928569@bconsole> ssl=0
      9 bacula-server: cram-md5.c:157-0 sending resp to challenge: 
nH+CS8krrl+Qg9+3F/+TZA
     10 1000 OK: 103 bacula-server Version: 9.4.1 (20 December 2018)
     11 Enter a period to cancel a command.
     12 *estimate
     13 Select Job resource (1-72): 9
     14 bacula-server: ua_cmds.c:2608-0 UA Open database
     15 Using Catalog "MyCatalog"
     16 bacula-server: job.c:1298-0 Created Client new_client record 56
     17 bacula-server: fd_cmds.c:314-0 Level=F last start time= job=
     18 Connecting to Client new_client at 10.20.20.1:9102
     19 bacula-server: bsockcore.c:299-0 Current 10.20.20.1:9102 All 
10.20.20.1:9102
     20 bacula-server: bsockcore.c:228-0 who=Client: new_client host=10.20.20.1 
port=9102
     21 bacula-server: bsockcore.c:411-0 OK connected to server  Client: 
new_client 10.20.20.1:9102.
     22 bacula-server: fd_cmds.c:116-0 Opened connection with File daemon
     23 bacula-server: authenticate.c:215-0 Sent: Hello Director bacula-server 
calling 103
     24 bacula-server: authenticate.c:237-0 cram_get_auth failed for Client: 
new_client
     25 bacula-server: authenticate.c:241-0 Director and File daemon passwords 
or names not the same.
     26 bacula-server: fd_cmds.c:123-0 Authentication error with FD.
     27 Failed to connect to Client.
     28 You have messages.
     29 *
--------------------------------------



------------- Client -----------------
      1 bacula-fd: address_conf.c:274-0 Initaddr 0.0.0.0:9102
      2 new_client: jcr.c:131-0 read_last_jobs seek to 192
      3 new_client: jcr.c:138-0 Read num_items=0
      4 new_client: plugins.c:97-0 load_plugins
      5 new_client: plugins.c:136-0 Found plugin: name=bpipe-fd.so len=11
      6 new_client: filed.c:270-0 filed: listening on port 9102
      7 new_client: bnet_server.c:86-0 Addresses 0.0.0.0:9102
      8 new_client: bsock.c:847-0 socket=4 who=client host=172.16.1.159 
port=22958
      9 new_client: job.c:317-0 <dird: Hello Director bacula_server calling 103
     10 new_client: job.c:340-0 Executing Hello Dir Hello Director 
bacula_server calling 103 command.
     11 new_client: cram-md5.c:69-0 send: auth cram-md5 challenge 
<1469168970.1549998494@new_client> ssl=0
     12 new_client: cram-md5.c:71-0 Send challenge comm error. ERR=Connection 
reset by peer
     13 new_client: authenticate.c:101-0 cram_auth challenge failed for 
Director client
     14 new_client: Fatal Error at authenticate.c:105 because:
     15 Incorrect password given by Director at client.
     16 new_client: job.c:343-0 Quit command loop. Canceled=0
     17 new_client: job.c:467-0 Calling term_find_files
     18 new_client: job.c:470-0 Done with term_find_files
     19 new_client: job.c:473-0 Done with free_jcr

------------------------------------------------

In particular, note Line 8, where the bacula server seems to identify
itself as 172.16.1.159 (the primary interface), even though the traffic
was sent via the 10.20.0.0 network.


Any thoughts?


_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to