[文章作者:张宴 本文版本:v1.0 最后修改:2007.08.21 转载请注明出处:http://blog.zyan.cc]
我这两天在工作中遇到了一些问题,在今天下午全部解决,于是决定写一篇文章,将实现方法记录下来:
一、背景环境:
1、都是Linux服务器;
2、“服务器A”与“服务器C”不在同一网络,两者之间是不通的;
3、“服务器A”、“服务器C”分别与“服务器B”相通。
二、要实现的需求:
1、让“服务器A”上的PHP程序能够连接“服务器C”上的MySQL数据库(IP:10.10.1.4,端口:3306);
2、不允许在“服务器A”上的PHP程序中更改MySQL地址(10.10.1.4)和MySQL端口(3306)。
三、实现原理:
理论上从“服务器A”是无法直接连接“服务器C”的IP地址(10.10.1.4)及其3306端口的【图中的虚线】,但通过“IP别名+TCP转发+端口映射”,我在“服务器A”上的PHP程序无须作任何修改的情况下实现了这项功能【图中的实线】。
访问路线:“服务器A”上的PHP程序─→虚拟10.10.1.4:3306─→192.168.1.3:8520─→真实10.10.1.4:3306
![点击在新窗口中浏览此图片 点击在新窗口中浏览此图片](attachment/200708/iptables.gif)
四、实现方法:
1、修改“服务器A”上的Apache配置文件httpd.conf(以下仅列出要修改的部分,其余部分用......表示):
然后重启Apache:
/usr/local/apache/bin/httpd -k restart
2、在“服务器A”上创建本地回环设备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、在“服务器A”上编译安装TCP转发软件rinetd(官方网站:http://www.boutell.com/rinetd/),将对10.10.1.4:80的TCP请求重定向到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
输入以下内容(格式:源地址 源端口 目标地址 目标端口):
启动rinetd守护进程
/usr/sbin/rinetd -c /etc/rinetd.conf
4、在“服务器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
为了防止服务器重启导致TCP转发失效,请:
vi /etc/rc.local
增加一行:
或者:
vi /etc/sysctl.conf
增加一行:
/sbin/sysctl -p
![](https://cdn.phpts.cn/phpts/www/webstatic/img/logo@2x.png)
![](https://cdn.phpts.cn/phpts/images/software/phptsbnew.jpg)
我这两天在工作中遇到了一些问题,在今天下午全部解决,于是决定写一篇文章,将实现方法记录下来:
一、背景环境:
1、都是Linux服务器;
2、“服务器A”与“服务器C”不在同一网络,两者之间是不通的;
3、“服务器A”、“服务器C”分别与“服务器B”相通。
二、要实现的需求:
1、让“服务器A”上的PHP程序能够连接“服务器C”上的MySQL数据库(IP:10.10.1.4,端口:3306);
2、不允许在“服务器A”上的PHP程序中更改MySQL地址(10.10.1.4)和MySQL端口(3306)。
三、实现原理:
理论上从“服务器A”是无法直接连接“服务器C”的IP地址(10.10.1.4)及其3306端口的【图中的虚线】,但通过“IP别名+TCP转发+端口映射”,我在“服务器A”上的PHP程序无须作任何修改的情况下实现了这项功能【图中的实线】。
访问路线:“服务器A”上的PHP程序─→虚拟10.10.1.4:3306─→192.168.1.3:8520─→真实10.10.1.4:3306
![点击在新窗口中浏览此图片 点击在新窗口中浏览此图片](attachment/200708/iptables.gif)
四、实现方法:
1、修改“服务器A”上的Apache配置文件httpd.conf(以下仅列出要修改的部分,其余部分用......表示):
引用
................
Listen 192.168.1.2:80
................
NameVirtualHost 192.168.1.2:80
<VirtualHost 192.168.1.2:80>
................
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、在“服务器A”上创建本地回环设备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、在“服务器A”上编译安装TCP转发软件rinetd(官方网站:http://www.boutell.com/rinetd/),将对10.10.1.4:80的TCP请求重定向到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
输入以下内容(格式:源地址 源端口 目标地址 目标端口):
引用
10.10.1.4 80 192.168.1.3 8520
启动rinetd守护进程
/usr/sbin/rinetd -c /etc/rinetd.conf
4、在“服务器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
为了防止服务器重启导致TCP转发失效,请:
vi /etc/rc.local
增加一行:
引用
echo "1"> /proc/sys/net/ipv4/ip_forward
或者:
vi /etc/sysctl.conf
增加一行:
引用
net.ipv4.ip_forward = 1
/sbin/sysctl -p
![](https://cdn.phpts.cn/phpts/www/webstatic/img/logo@2x.png)
![](https://cdn.phpts.cn/phpts/images/software/phptsbnew.jpg)
shz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:33
I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post. Lead generation
shzz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:34
This article gives the light in which we can observe the reality. This is very nice one and gives indepth information. Thanks for this nice article. Lead generation
shz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:37
The next time I read a blog, I hope that it doesnt disappoint me as much as this one. I mean, I know it was my choice to read, but I actually thought you have something interesting to say. All I hear is a bunch of whining about something that you could fix if you werent too busy looking for attention. Lead generation
shzz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:38
Wonderful blog post. This is absolute magic from you! I have never seen a more wonderful post than this one. You've really made my day today with this. I hope you keep this up! Lead generation
shz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:40
Very informative post ! There is a lot of information here that can help any business get started with a successful social networking campaign ! Lead generation
shzz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:41
Great survey. I'm sure you're getting a great response. Lead generation
shzz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:44
I must say, I thought this was a pretty interesting read when it comes to this topic. Liked the material. . . . . Lead generation
shz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:44
I see the greatest contents on your blog and I extremely love reading them. Lead generation
shz
![给他/她发邮件 Email](template/RuiPai/images/email.gif)
2022-7-2 22:54
Thanks for the nice blog. It was very useful for me. I'm happy I found this blog. Thank you for sharing with us,I too always learn something new from your post. Lead generation
bekean23
2023-12-29 16:28
Are you ready for a gaming experience like no other? Watermelon game invites you to dive into a delightful universe where physics-based challenges meet mind-bending puzzles.
分页: 2/2
1 2
![第一页 第一页](template/RuiPai/images/arrows/doubleleft.gif)
![上页 上页](template/RuiPai/images/arrows/singleleft.gif)
![最后页 最后页](template/RuiPai/images/arrows/doubleright.gif)