把网站放在自己服务器上 内网能访问吗 局域网通过域名能访问吗
做了DNAT,外网正常访问,内网却无法访问。现将原因总结如下:设网络结构如下:外网某机器为W1,路由器为R1,内网服务器为S1,内网某机器为C1,设服务为80地址分布如下:R1:外(eth0):192。 168。0。5 内(eth1):192。168。1。254S1:192。168。1。5C1:192。168。1。8原因如下:外网为什么能成功:当W1以某IP端口80访问R1的外网地址192。168。 0。5时,数据包到达192。168。0。5的接口eth0,ROS根据DNAT规则做了到S1 192。168。1。5的转发,S1 192。168。1。5收到来自某IP的包后S1会发出正确的相...全部
做了DNAT,外网正常访问,内网却无法访问。现将原因总结如下:设网络结构如下:外网某机器为W1,路由器为R1,内网服务器为S1,内网某机器为C1,设服务为80地址分布如下:R1:外(eth0):192。
168。0。5 内(eth1):192。168。1。254S1:192。168。1。5C1:192。168。1。8原因如下:外网为什么能成功:当W1以某IP端口80访问R1的外网地址192。168。
0。5时,数据包到达192。168。0。5的接口eth0,ROS根据DNAT规则做了到S1 192。168。1。5的转发,S1 192。168。1。5收到来自某IP的包后S1会发出正确的相应,此响应的目的IP为W1的IP,根据默认网关(R1的eth1)192。
168。1。254规则把回应包发到R1,因为R1先前DNAT的关系(有DNAT的记录),R1回做一个反方向的NAT转发,从而数据包能够正确的到达W1,因此能够正确通信。 内网为什么不能成功:1、 DNAT规则是针对eth0口配置的:设R1的DNAT规则:iptables –t nat –A PREROUTING –i eth0 –p tcp –m tcp –d 192。
168。0。5 –dport 80 –j DNAT –-to-destinstion 192。168。1。5当C1以192。168。0。5为目的IP访问80服务的时候,数据包从192。168。
1。254口传入,R1根据路由规则,会把目的192。168。0。5的地址直接送到上层接口,而不会经过R1为eth0接口配置的DNAT规则,那么此时192。168。0。5开了80服务了吗?很显然没有,因此无法访问。
2、 DNAT的规则是全局的:设R1的DNAT规则:iptables –t nat –A PREROUTING –p tcp –m tcp d 192。168。0。5 –dport 80 –j DNAT –-to-destinstion 192。
168。1。5当C1以192。168。0。5为目的IP访问80服务的时候,数据包从192。168。1。254口传入,R1根据DNAT规则会把此数据包DNAT到正确的S1服务器192。168。1。
5,当S1收到包的时候S1会根据自己的路由表不经过R1的转发而会直接把数据发到C1,因为C1和S1是在同一个网络,这时候C1回收到S1的回应,按说此时应该能正常通信。但不幸的是我们忽略了源IP的问题。
C1是把数据包发给的是R1的外网IP 192。168。0。5,而收到的IP的源地址却是S1的IP192。168。1。5,虽然数据包的除IP外所有的都是正确的,但C1仍然不会接受,会把这个包丢弃的。
因此通信还是无法进行。 解决办法:1、 从DNS入手,在内网设置自己的DNS,或者编辑client的hosts表把S1的地址不要解析成外网的IP,这样就变成内网的通信,还不占用ROS的带宽。
这是我首推的方法。2、 如果一定要走ROS,首先你要为每个可能进入的接口配置相应的DNAT策略。 应该如何设置呢?又有两种情况:1) 如果可以把服务器放到一个单独的网段请你及时这样做。
因为这样可以避免攻击,便于控制等等好处N多了。麻烦就是需要ROS多加一个网卡当然如果你配置多地址的话,网卡都可以省了,不过这么省不太好吧。当然还需要配置正确的SNAT。2) 有些人说我就不能放到单独的网段,那我也有办法,这是我最不赞成的方法,就是请你删掉S1上192。
168。1。0网络的路由表项目,这样会强制S1到C1的数据包走R1,这样R1就可以实施相反的转换,当然也就可以正常通信了。route del –net 192。168。1。0 netmask 255。
255。255。0 gw * dev eth1。收起