网络拓扑图:
前面两篇网站架设(一)WAMP搭建和网站架设(二)Discuz论坛搭建成功后,局域网内主机可在浏览器里输入WEB服务器地址(192.168.0.30)访问网站。
还有几个问题需要解决:
1.外网主机(网关外其他主机)如何访问WEB服务器。
2.外网/内网如何通过域名访问WEB服务器。
一、内外网主机访问WEB服务器(在浏览器里输入网关外网地址)。
假设网关外网某次获得的地址为219.245.89.133.
(1)外网主机在浏览器输入网关外网地址(219.245.89.133.)访问WEB服务器。
WEB服务器在局域网内部,外网不能直接访问,但是外网可以访问到网关外网地址219.245.89.133.。因此,外网要想访问WEB服务器,需要在网关处做DNAT映射,即将凡是访问网关外网地址219.245.89.0/24端口为80的包重定向到WEB服务器192.168.0.30.
(2)内网主机在浏览器输入网关外网地址(219.245.89.133.)访问WEB服务器。
如果只做上面的DNAT映射,虽然外网主机可以通过在浏览器里输入网关外网地址访问WEB服务器了,但是内网主机在浏览器里输入网关外网地址不能访问WEB服务器(可以输入192.168.0.30访问)。原因如下:
比如192.168.0.66主机向219.245.89.133:80(网关外网某次获得的地址)请求,网关做DNAT,将该请求转向WEB服务器192.168.0.30,请求包没有问题;返回时有问题了,WEB服务器192.168.0.30接收到该包时,看到该包的源地址是192.168.0.66,和WEB在同一网段,所以WEB服务器直接将回复包发给192.168.0.66。主机192.168.0.66接收到该包时,看到的包的源地址是192.168.0.30,而不是219.245.89.133,所以将其丢弃(192.168.0.66发给219.245.89.133,所以192.168.0.66期望接收到的包的源地址是219.245.89.133)。
为了使内网主机输入网关外网地址也能访问WEB服务器,还需要在网关处做SNAT。
(3)网关主机本身在浏览器输入网关外网地址(219.245.89.133.)访问WEB服务器。
做了上面的DNAT和SNAT后,还有一个问题需要解决,就是网关主机本身不能访问WEB服务器,在网关主机浏览器输入网关外网地址(219.245.89.133.)时访问的是网关本身的WEB服务器(如果网关本身架设了WEB服务器的话)。
还需要对网关主机本身做DNAT。
(4)综上所述,只需在网关执行下列命令,之后内外网主机(包括网关)就可以在浏览器里输入219.245.89.133(网关外网某次动态获取的IP)就可访问WEB服务器了。
1 2 3 4 5 6 7 8 9 10 11 12 13
|
|
#下面两条命令保证外网主机可以访问WEB服务器。 #将到达网关的目的地址是219.245.89.0/24、端口为80的包重定向到192.168.0.30.(即DNAT,将目的地址是219.245.89.0/24:80的包的目的地址改为192.168.0.30) iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30 iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30 #只有上面的命令,局域网内部主机在浏览器里输入网关外网地址是不能访问WEB服务器的,必须添加下面两条命令。 #将到达网关的目的地址是192.168.0.30:80的包将其源地址替换为192.168.0.1. iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1 iptables -t nat -A POSTROUTING -p udp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1 #下面两条命令使得网关在浏览器里输入网关外网地址时重定向到WEB服务器。没有这两条命令,在网关浏览器输入网关外网地址时将访问网关自己的WEB服务器(如果网关主机上架设了WEB服务器)。 iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30 iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30
|
二、外网/内网通过域名访问WEB服务器。
经过上面的配置,内外网可以通过网关外网地址219.245.89.133访问WEB服务器了,但是网关外网获得的地址是变化的,可能下次开机后ISP给分配的地址变成219.245.89.233了,总不能每次访问WEB服务器都得查看网关外网地址是多少吧!
这里通过域名映射动态IP技术,即使用域名软件,该域名软件动态获得网关外网地址(每次IP变化时,域名软件自动匹配),只需访问域名,就可以访问WEB服务器了。
用no-ip软件实现外网通过域名访问局域网网关内部WEB服务器。
1.在no-ip官网(www.no-ip.com)注册,申请域名,并进行首次绑定IP。
(1)注册。
(2)申请域名(我申请304.myftp.org),查看下网关外网地址,进行首次绑定,以后软件会自动更新对应的IP。
2.在网关下载并安装no-ip2.
网关执行 #sudo apt-get install noip2
下载过程中的用户名密码是在no-ip官网注册的用户名密码。
3.仍需要在网关做NAT映射。
在网关终端执行下列命令。
1 2 3 4 5 6 7 8 9 10 11 12 13
|
|
#下面两条命令保证外网主机可以访问WEB服务器。 #将到达网关的目的地址是219.245.89.0/24、端口为80的包重定向到192.168.0.30.(即DNAT,将目的地址是219.245.89.0/24:80的包的目的地址改为192.168.0.30) iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30 iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30 #只有上面的命令,局域网内部主机在浏览器里输入网关外网地址是不能访问WEB服务器的,必须添加下面两条命令。 #将到达网关的目的地址是192.168.0.30:80的包将其源地址替换为192.168.0.1. iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1 iptables -t nat -A POSTROUTING -p udp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1 #下面两条命令使得网关在浏览器里输入网关外网地址时重定向到WEB服务器。没有这两条命令,在网关浏览器输入网关外网地址时将访问网关自己的WEB服务器(如果网关主机上架设了WEB服务器)。 iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30 iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30
|
至此,内外网主机包括网关本身可以通过域名http://304.myftp.org访问WEB服务器了,而不用担心网关外网网卡获得的地址发生变化了。