Issue 1:
I have set -Des.network.bind_host and -Des.network.publish_host to use IP address of an non-primary interface, but the _cat/nodes?h=ip,name still gives me primary IP.

curl '10.10.1.1:9200/_nodes/_local?pretty'
{
"cluster_name" : "elasticsearch",
"nodes" : {
"wxDJnCJfQjKjsm0dQvqIVQ" : {
"name" : "Algrim the Strong",
"transport_address" : "inet[/10.10.1.1:9300]",
"host" : "d1edb4b54c7f",
"ip" : "10.1.0.11",
"version" : "1.4.0",
"build" : "bc94bd8",
"http_address" : "inet[/10.10.1.1:9200]",
"settings" : {
"name" : "Algrim the Strong",
"path" : {
"logs" : "/usr/elasticsearch-1.4.0/logs",
"home" : "/usr/elasticsearch-1.4.0"
},
"cluster" : {
"name" : "elasticsearch"
},
"client" : {
"type" : "node"
},
"foreground" : "yes",
"network" : {
"bind_host" : "_ethwe:ipv4_",
"publish_host" : "_ethwe:ipv4_"
}
},
"os" : {
"refresh_interval_in_millis" : 1000,
"available_processors" : 1,
"cpu" : {
"vendor" : "Intel",
"model" : "Core(TM) i7-4870HQ CPU @ 2.50GHz",
"mhz" : 2498,
"total_cores" : 1,
"total_sockets" : 1,
"cores_per_socket" : 1,
"cache_size_in_bytes" : 6144
},
"mem" : {
"total_in_bytes" : 1046568960
},
"swap" : {
"total_in_bytes" : 0
}
},
"process" : {
"refresh_interval_in_millis" : 1000,
"id" : 1,
"max_file_descriptors" : 1048576,
"mlockall" : false
},
"jvm" : {
"pid" : 1,
"version" : "1.8.0_25",
"vm_name" : "Java HotSpot(TM) 64-Bit Server VM",
"vm_version" : "25.25-b02",
"vm_vendor" : "Oracle Corporation",
"start_time_in_millis" : 1416827899445,
"mem" : {
"heap_init_in_bytes" : 268435456,
"heap_max_in_bytes" : 1065025536,
"non_heap_init_in_bytes" : 2555904,
"non_heap_max_in_bytes" : 0,
"direct_max_in_bytes" : 1065025536
},
"gc_collectors" : [ "ParNew", "ConcurrentMarkSweep" ],
"memory_pools" : [ "Code Cache", "Metaspace", "Compressed Class Space", "Par Eden Space", "Par Survivor Space", "CMS Old Gen" ]
},
"thread_pool" : {
"percolate" : {
"type" : "fixed",
"min" : 1,
"max" : 1,
"queue_size" : "1k"
},
"bench" : {
"type" : "scaling",
"min" : 1,
"max" : 1,
"keep_alive" : "5m",
"queue_size" : -1
},
"listener" : {
"type" : "fixed",
"min" : 1,
"max" : 1,
"queue_size" : -1
},
"index" : {
"type" : "fixed",
"min" : 1,
"max" : 1,
"queue_size" : "200"
},
"refresh" : {
"type" : "scaling",
"min" : 1,
"max" : 1,
"keep_alive" : "5m",
"queue_size" : -1
},
"suggest" : {
"type" : "fixed",
"min" : 1,
"max" : 1,
"queue_size" : "1k"
},
"generic" : {
"type" : "cached",
"keep_alive" : "30s",
"queue_size" : -1
},
"warmer" : {
"type" : "scaling",
"min" : 1,
"max" : 1,
"keep_alive" : "5m",
"queue_size" : -1
},
"search" : {
"type" : "fixed",
"min" : 3,
"max" : 3,
"queue_size" : "1k"
},
"flush" : {
"type" : "scaling",
"min" : 1,
"max" : 1,
"keep_alive" : "5m",
"queue_size" : -1
},
"optimize" : {
"type" : "fixed",
"min" : 1,
"max" : 1,
"queue_size" : -1
},
"management" : {
"type" : "scaling",
"min" : 1,
"max" : 5,
"keep_alive" : "5m",
"queue_size" : -1
},
"get" : {
"type" : "fixed",
"min" : 1,
"max" : 1,
"queue_size" : "1k"
},
"merge" : {
"type" : "scaling",
"min" : 1,
"max" : 1,
"keep_alive" : "5m",
"queue_size" : -1
},
"bulk" : {
"type" : "fixed",
"min" : 1,
"max" : 1,
"queue_size" : "50"
},
"snapshot" : {
"type" : "scaling",
"min" : 1,
"max" : 1,
"keep_alive" : "5m",
"queue_size" : -1
}
},
"network" : {
"refresh_interval_in_millis" : 5000,
"primary_interface" : {
"address" : "10.1.0.11",
"name" : "eth0",
"mac_address" : "02:42:0A:01:00:0B"
}
},
"transport" : {
"bound_address" : "inet[/10.10.1.1:9300]",
"publish_address" : "inet[/10.10.1.1:9300]"
},
"http" : {
"bound_address" : "inet[/10.10.1.1:9200]",
"publish_address" : "inet[/10.10.1.1:9200]",
"max_content_length_in_bytes" : 104857600
},
"plugins" : [ ]
}
}
}

Although the above has correct addresses in most places, but the nodes.*.ip...

curl '10.10.1.1:9200/_cat/nodes?h=ip,name,http_address'
10.1.0.6 Thane Ector
10.1.0.12 Steel Spider
10.1.0.5 Aguja
10.1.0.11 Algrim the Strong

At least it would be great to be able to do _cat/nodes?h=http_address as sort of a work-around, I guess, but doesn't look like it's currently exposed.

Issue 2:
A node with network.host set to 127.0.0.1 will show an IP that has nothing to do with the lo interface.

$ curl -s localhost:9200/_nodes\?all | python -mjson.tool | fgrep bound
"bound_address": "inet[/127.0.0.1:9200]",
"bound_address": "inet[/127.0.0.1:9300]",
$ curl -s localhost:9200/_cat/nodes\?h=ip,host
192.168.56.10 es1

Repro on OS X and Ubuntu 12.04.