<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post/842/</link>
<title><![CDATA[IP别名+TCP转发+端口映射实现跨网络访问]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Linux技术]]></category>
<pubDate>Fri, 20 May 2011 15:00:45 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/842/</guid> 
<description>
<![CDATA[ 
	　　我这两天在工作中遇到了一些问题，在今天下午全部解决，于是决定写一篇文章，将实现方法记录下来：<br/><br/>　　一、背景环境：<br/>　　1、都是Linux服务器；<br/>　　2、“服务器A”与“服务器C”不在同一网络，两者之间是不通的；<br/>　　3、“服务器A”、“服务器C”分别与“服务器B”相通。<br/><br/>　　二、要实现的需求：<br/>　　1、让“服务器A”上的PHP程序能够连接“服务器C”上的MySQL数据库（IP：10.10.1.4，端口：3306）；<br/>　　2、不允许在“服务器A”上的PHP程序中更改MySQL地址（10.10.1.4）和MySQL端口（3306）。<br/><br/>　　三、实现原理：<br/>　　理论上从“服务器A”是无法直接连接“服务器C”的IP地址（10.10.1.4）及其3306端口的【图中的虚线】，但通过“IP别名+TCP转发+端口映射”，我在“服务器A”上的PHP程序无须作任何修改的情况下实现了这项功能【图中的实线】。<br/>　　访问路线：“服务器A”上的PHP程序─→虚拟10.10.1.4:3306─→192.168.1.3:8520─→真实10.10.1.4:3306<br/><br/>　　<a href="http://www.zhanghaijun.com/attachment.php?fid=44" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=44" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>　　四、实现方法：<br/>　　1、修改“服务器A”上的Apache配置文件httpd.conf（以下仅列出要修改的部分，其余部分用......表示）：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">................<br/>Listen 192.168.1.2:80<br/>................<br/>NameVirtualHost 192.168.1.2:80<br/>&lt;VirtualHost 192.168.1.2:80&gt;<br/>................</div></div><br/>　　然后重启Apache：<br/>　　/usr/local/apache/bin/httpd -k restart<br/><br/>　　2、在“服务器A”上创建本地回环设备lo（即127.0.0.1）的IP别名10.10.1.4，即虚拟IP：<br/>　　『图中的①』<br/>　　/sbin/ifconfig lo:0 10.10.1.4 broadcast 10.10.1.4 netmask 255.255.255.255 up<br/>　　/sbin/route add -host 10.10.1.4 dev lo:0<br/><br/>　　3、在“服务器A”上编译安装TCP转发软件rinetd（官方网站：http://www.boutell.com/rinetd/），将对10.10.1.4:80的TCP请求重定向到192.168.1.3:8520上：<br/>　　『图中的②』<br/>　　wget http://www.boutell.com/rinetd/http/rinetd.tar.gz<br/>　　tar zxvf rinetd.tar.gz<br/>　　cd rinetd<br/>　　make &amp;&amp; make install<br/>　　vi /etc/rinetd.conf<br/>　　输入以下内容(格式：源地址 源端口 目标地址 目标端口)：<br/>&nbsp;&nbsp;&nbsp;&nbsp;10.10.1.4 80 192.168.1.3 8520<br/>　　启动rinetd守护进程<br/>　　/usr/sbin/rinetd -c /etc/rinetd.conf<br/><br/>　　4、在“服务器B”上利用iptables配置端口映射，将自身的8520端口映射到10.10.1.4的3306端口上：<br/>　　『图中的③』<br/>　　echo &quot;1&quot;&gt; /proc/sys/net/ipv4/ip_forward<br/>　　/sbin/iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 -d 192.168.1.3 --dport 8520 -j DNAT --to-destination 10.10.1.4:3306<br/>　　/sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 10.10.1.4 --dport 3306 -j SNAT --to-source 10.10.1.3<br/><br/>　　为了防止服务器重启导致TCP转发失效，请：<br/>　　vi /etc/rc.local<br/>　　增加一行：<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;1&quot;&gt; /proc/sys/net/ipv4/ip_forward<br/>　　或者：<br/>　　vi /etc/sysctl.conf<br/>　　增加一行：<br/>&nbsp;&nbsp;&nbsp;&nbsp;net.ipv4.ip_forward = 1<br/>　　使其生效：/sbin/sysctl -p<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文章来源：http://blog.s135.com/post/286/
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/842/#blogcomment2345</link>
<title><![CDATA[[评论] IP别名+TCP转发+端口映射实现跨网络访问]]></title> 
<author>wrfewre &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Wed, 16 Jan 2013 06:26:47 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/842/#blogcomment2345</guid> 
<description>
<![CDATA[ 
	rewrewre
]]>
</description>
</item>
</channel>
</rss>