The Problem
So the situation is this. I have a Java script that creates a “listener” (i.e. a server) in CORBA that will be communicated over another CORBA connection as the location to be connected to. In Wireshark I see this as as packet with the following fields:
Profile ID: TAG_INTERNET_IOP (0)
IIOP::Profile_host: 127.0.1.1
IIOP::Profile_port: 49170
Now this is no good. Any remote service that tries to connect to 127.0.1.1 will end up trying to communicate with itself (127.* is the loopback address).
The Solution
We need a way of letting Java CORBA figure out for itself what the IP address of the host we’re running our program on is.
The problem, in Ubuntu 12.04.1 at least, is that the /etc/hosts file contain the following entries by default (the problem line is highlighted in bold):
127.0.0.1 localhost
127.0.1.1 myserver.mydomain myserver
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
What we need to do is comment out this 127.0.1.1 entry and replace it with the current IP address and uname of the host.
If, like me, you are connected by way of interface eth0 then you can perform the necessary change using the following one-liner:
MYNAME=`uname -n` \
MYIP=`ifconfig eth0 |perl -ne 'print $1 if m/:(\d+\.\d+\.\d+\.\d+)/'` \
perl -i.bak -pe "s/^(127.0.1.1.*$)/#\$1\\n\$ENV{MYIP} \$ENV{MYNAME}/" /etc/hosts
Result
This will result in a /etc/hosts file that will look something like the following:
127.0.0.1 localhost
#127.0.1.1 myserver.mydomain myserver
10.191.22.14 myserver
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Recent Comments