networking differences with php file_get_contents under 6.1 and 7.2 ?

Olivier Mueller om-lists-bsd at omx.ch
Tue Dec 15 13:05:25 UTC 2009


Hello,

I just observed a strange thing on 2 servers with a very similar setup
(apache config, php version/ini, virtual ip addresses, etc.) but under 2
different FreeBSD versions. 

I would like to understand if is related to the OS version and why. 

To test, I have a short php script which calls itselfs with
file_get_contents() : under 6.1 the source IP is the one from apache
virtual host, and under 7.2 it's the first interface from server : why
this difference?  Is it a new feature/change in 7.x, or a bug(fix)? 

If I do a request on an external server (like
http://crazzy.se/get_ip.php ) it always return the main server IP. Only
when I do the call locally and under 6.1 it's not the case... 




Under 6.1 I get this output (scroll down for the script):
 test1.example.com = virtual host under 10.0.0.239
 main server ip = 10.0.0.210

------------------------------------------------------------
Initial call:
SERVER_ADDR: 10.0.0.239
REMOTE_ADDR: 10.0.0.12

calling... http://test1.example.com/iptest_om.php?recall=1
------------------------------------------------------------
Call from self:
SERVER_ADDR: 10.0.0.239
REMOTE_ADDR: 10.0.0.239 (client)     <<<<====== ????
end
------------------------------------------------------------
end

ifconfig: 

bce0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=3b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU>
	inet6 fe80::218:feff:fe31:8ae4%bce0 prefixlen 64 scopeid 0x1 
	inet 10.0.0.210 netmask 0xffffff00 broadcast 10.0.0.255
	inet 10.0.0.212 netmask 0xffffff00 broadcast 10.0.0.255
	inet 10.0.0.239 netmask 0xffffff00 broadcast 10.0.0.255



and under 7.2:   (test2.example.com = 10.0.0.122, main = .120)

------------------------------------------------------------
Initial call:
SERVER_ADDR: 10.0.0.122
REMOTE_ADDR: 10.0.0.12 

calling... http://test2.example.com/iptest_om.php?recall=1
------------------------------------------------------------
Call from self:
SERVER_ADDR: 10.0.0.122
REMOTE_ADDR: 10.0.0.120 (client)         <<====== ok

end
------------------------------------------------------------
end


ifconfig:

bce0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=1bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4>
	ether 00:1f:29:06:9c:38
	inet 10.0.0.120 netmask 0xffffff00 broadcast 10.0.0.255
	inet 10.0.0.122 netmask 0xffffff00 broadcast 10.0.0.255
	inet 10.0.0.123 netmask 0xffffff00 broadcast 10.0.0.255





test script: 

<?php

        if ($_GET["recall"] != 1) {
                print "<hr>\n";
                print "<b>Initial call:<br>\n";
                print "SERVER_ADDR: " . $_SERVER["SERVER_ADDR"] . "<br>\n";
                print "REMOTE_ADDR: " . $_SERVER["REMOTE_ADDR"] . "<br>\n";
                print "<br>\n";
                $url = "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"] . "?recall=1";
                print "calling... $url<br>\n";

                print "<font color=blue>\n";
                echo file_get_contents($url);
                print "</font>\n";
                print "<hr>\n";
        }

        if ($_GET["recall"] == 1) {
                print "<hr>\n";
                print "<b>Call from self:<br>\n";
                print "SERVER_ADDR: " . $_SERVER["SERVER_ADDR"] . "<br>\n";
                print "REMOTE_ADDR: " . $_SERVER["REMOTE_ADDR"] . " (client)<br>\n";
                print "<br>\n";
                print "\n";
        }

        print "end<br>\n";

?>



Thanks for any feedback & regards,
Olivier



More information about the freebsd-net mailing list