jinfeng_wang

          G-G-S,D-D-U!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
           
            [文章作者:張宴 本文版本:v1.0 最后修改:2007.08.21 轉(zhuǎn)載請(qǐng)注明出處:http://blog.s135.com]

            我這兩天在工作中遇到了一些問(wèn)題,在今天下午全部解決,于是決定寫(xiě)一篇文章,將實(shí)現(xiàn)方法記錄下來(lái):

            一、背景環(huán)境:
            1、都是Linux服務(wù)器;
            2、“服務(wù)器A”與“服務(wù)器C”不在同一網(wǎng)絡(luò),兩者之間是不通的;
            3、“服務(wù)器A”、“服務(wù)器C”分別與“服務(wù)器B”相通。

            二、要實(shí)現(xiàn)的需求:
            1、讓“服務(wù)器A”上的PHP程序能夠連接“服務(wù)器C”上的MySQL數(shù)據(jù)庫(kù)(IP:10.10.1.4,端口:3306);
            2、不允許在“服務(wù)器A”上的PHP程序中更改MySQL地址(10.10.1.4)和MySQL端口(3306)。

            三、實(shí)現(xiàn)原理:
            理論上從“服務(wù)器A”是無(wú)法直接連接“服務(wù)器C”的IP地址(10.10.1.4)及其3306端口的【圖中的虛線(xiàn)】,但通過(guò)“IP別名+TCP轉(zhuǎn)發(fā)+端口映射”,我在“服務(wù)器A”上的PHP程序無(wú)須作任何修改的情況下實(shí)現(xiàn)了這項(xiàng)功能【圖中的實(shí)線(xiàn)】。
            訪(fǎng)問(wèn)路線(xiàn):“服務(wù)器A”上的PHP程序─→虛擬10.10.1.4:3306─→192.168.1.3:8520─→真實(shí)10.10.1.4:3306

            點(diǎn)擊在新窗口中瀏覽此圖片

            四、實(shí)現(xiàn)方法:
            1、修改“服務(wù)器A”上的Apache配置文件httpd.conf(以下僅列出要修改的部分,其余部分用......表示):
          引用
          ................
          Listen 192.168.1.2:80
          ................
          NameVirtualHost 192.168.1.2:80
          <VirtualHost 192.168.1.2:80>
          ................

            然后重啟Apache:
            /usr/local/apache/bin/httpd -k restart

            2、在“服務(wù)器A”上創(chuàng)建本地回環(huán)設(shè)備lo(即127.0.0.1)的IP別名10.10.1.4,即虛擬IP:
            『圖中的①』
            /sbin/ifconfig lo:0 10.10.1.4 broadcast 10.10.1.4 netmask 255.255.255.255 up
            /sbin/route add -host 10.10.1.4 dev lo:0


            3、在“服務(wù)器A”上編譯安裝TCP轉(zhuǎn)發(fā)軟件rinetd(官方網(wǎng)站:http://www.boutell.com/rinetd/),將對(duì)10.10.1.4:80的TCP請(qǐng)求重定向到192.168.1.3:8520上:
            『圖中的②』
            wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
            tar zxvf rinetd.tar.gz
            cd rinetd
            make && make install
            vi /etc/rinetd.conf

            輸入以下內(nèi)容(格式:源地址 源端口 目標(biāo)地址 目標(biāo)端口):
          引用
          10.10.1.4 80 192.168.1.3 8520

            啟動(dòng)rinetd守護(hù)進(jìn)程
            /usr/sbin/rinetd -c /etc/rinetd.conf

            4、在“服務(wù)器B”上利用iptables配置端口映射,將自身的8520端口映射到10.10.1.4的3306端口上:
            『圖中的③』
            echo "1"> /proc/sys/net/ipv4/ip_forward
            /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
            /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

            為了防止服務(wù)器重啟導(dǎo)致TCP轉(zhuǎn)發(fā)失效,請(qǐng):
            vi /etc/rc.local
            增加一行:
          引用
          echo "1"> /proc/sys/net/ipv4/ip_forward


            或者:
            vi /etc/sysctl.conf
            增加一行:
          引用
          net.ipv4.ip_forward = 1

            /sbin/sysctl -p
          posted on 2010-04-14 15:17 jinfeng_wang 閱讀(1566) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): ZZ
          主站蜘蛛池模板: 晋城| 望都县| 民权县| 屯昌县| 芜湖县| 辽宁省| 涿州市| 集贤县| 阳城县| 淳安县| 额尔古纳市| 五常市| 泰宁县| 临洮县| 崇仁县| 正镶白旗| 工布江达县| 临清市| 乌拉特后旗| 得荣县| 伊通| 泽州县| 平阴县| 仁化县| 湟源县| 玉龙| 无锡市| 常州市| 芜湖市| 紫金县| 桐梓县| 贺州市| 德江县| 沂南县| 星子县| 松原市| 边坝县| 南澳县| 遂昌县| 凤山市| 沈丘县|