My master policy servers have multiple VLAN interfaces.  I want to be able to 
grab data off of clients, so my clients also run cf-serverd.  I lock down which 
machines they’ll accept connections from by IP address.  So, I define a single 
address that my clients will accept connections from.


This means that my master policy servers are required to connect to clients 
using a specific interface.  It can’t use any VLAN interface it wants... I 
attempt to set this using bindtointerface.  In my promises.cf on my master 
policy servers, I have the below...


bundle common g
{
# Define some global variables
vars:
 "global_nic"
                string  => execresult("/usr/bin/getent hosts `/bin/hostname` | 
awk '{print $1}'","useshell");
}

body agent control
{
 # Bind to the global NIC on all inbound / outbound network i/o
        bindtointerface         =>      "$(g.global_nic)";
}


Executing the above command returns the IP address of the interface I want to 
bind to.

# /usr/bin/getent hosts `/bin/hostname` | awk '{print $1}'
172.17.50.245

So that maps to the following VLAN interface on the master policy server

# ifconfig e1000g750001
e1000g750001: flags=201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS> mtu 1500 
index 2
        inet 172.17.50.245 netmask ffffff00 broadcast 172.17.50.255
        ether 0:14:4f:8d:97:ad




I noticed that my clients were rejecting connections from the master policy 
server.  Putting cf-serverd into verbose mode, I’m seeing this...

(Network information for the client)

# ifconfig nge2
nge2: flags=1040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4> mtu 1500 
index 2
        inet 172.17.74.172 netmask ffffff00 broadcast 172.17.74.255
        groupname primary
        ether 0:21:28:a2:47:6


# /var/cfengine/bin/cf-serverd –v
...
..
.....
cf3> Summarize control promises
cf3> Granted access to paths :
cf3> Path: /var/cfengine/outgoing (encrypt=1)
cf3>    Admit: 172\.17\..* root=
cf3> 172\.17\..*,
cf3> Path: /var/cfengine/bin/cf-agent (encrypt=0)
cf3>    Admit: 172\.17\..* root=
cf3> 172\.17\..*,
cf3> Denied access to paths :
cf3> Path: /var/cfengine/outgoing
cf3> Path: /var/cfengine/bin/cf-agent
cf3>  -> Host IPs allowed connection access :
cf3>  .... IP: 172.17.50.245
cf3> Host IPs denied connection access :
cf3> Host IPs allowed multiple connection access :
cf3>  .... IP: 172.17.50.245
cf3> Users from whom we accept connections :
cf3>  .... USERS: root
cf3> Host IPs from NAT which we don't verify :
cf3> Dynamical Host IPs (e.g. DHCP) whose bindings could vary over time :
cf3> Listening for connections ...


cf3>  -> Accepting a connection
cf3> Not allowing connection from non-authorized IP 172.17.74.245




So, bindtointerface really isn’t working here.  My master policy server 
connected to a client on a different VLAN interface than what I instructed it 
to bind to.  Why?  Because it had a VLAN interface on the same subnet as this 
client.  I suppose the operating system is getting in the way here.  Its trying 
to not send packets out the default gateway and route them.  Instead, its 
sending traffic out the interface where both machines are on the same VLAN.

My master policy server has a VLAN interface on this same subnet.

# ifconfig e1000g774001
e1000g774001: flags=201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS> mtu 1500 
index 26
        inet 172.17.74.245 netmask ffffff00 broadcast 172.17.74.255
        ether 0:14:4f:8d:97:ad


Anyways, short of defining every single VLAN address in cf-serverd, does anyone 
have / can think of any workarounds?  I don’t want to have to modify 
cf-serverd.cf on every client and bounce the daemon every time a new VLAN is 
introduced on my master policy servers, but it seems that there’s no way that I 
can think of forcing outbound Cfengine traffic / requests through a single 
interface when other interfaces exist on the same subnet.

Thanks
Mike


_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to