Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1223153
  • 博文数量: 322
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3276
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-17 09:21
文章分类

全部博文(322)

文章存档

2010年(155)

2009年(167)

我的朋友

分类: LINUX

2010-04-05 10:09:09

一、测试工作室的网络要求:
测试工作室在会议室内,作为独立测试环境,希望于公司现有网络分开;因为希望能够访问公司内网的资源,也希望不用去会议室就可以远程桌面访问测试服务器,或者通过不同端口访问发布在工作室内部的应用程序。

这里就提出了两个要求:

1、      测试工作室可以随意访问公司内网(主要是访问内网的数据库服务器或者共享文件);

2、      公司内网可以通过特定端口访问测试工作室(http协议访问应用程序,远程桌面访问控制测试服务器)。

 

这恰巧就是一台普通路由器应该具备的功能。普通家庭用的路由器就是具备路由转发功能,实现共享上网,然后还可以映射端口,供外网访问到内网开启的对外服务。

 

这里重点写下里面的路由实现原理,以解释我们访问实现方法。

 

二、liunx双网卡代理服务器的信息
操作系统:Redhat Linux9

网络图:

公司内网(10网段)——公司网关——外网
      |

网卡Eth0(10.1.10.173)

  |
    linux代理做的路由

  |

网卡Eth1(192.168.1.1)

  |
    交换机——工作组(192网段)

网卡:

Eth0:IP:10.1.10.173

    Mask:255.255.255.0

    Gateway:10.1.10.254

 

Eth1:IP:192.168.1.1

    Mask:255.255.255.0

    Gateway:空

 

路由表:设置完毕后,系统自动添加

Destination     Gateway       Genmask       Flags  Metric  Ref    Use Iface

192.168.1.0     *             255.255.255.0   U      0       0      0 eth1

10.1.10.0       *             255.255.255.0   U      0       0      0 eth0

default         10.1.10.254     0.0.0.0        UG     0       0      0 eth0

 

路由脚本:

touch /var/lock/subsys/local

#到达指定目录

/sbin/modprobe ip_tables

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_conntrack_ftp

#加载这些功能模块

/sbin/iptables –F                 

#删除file表中的全部规则

/sbin/iptables -F -t nat

#删除nat表中的全部规则

/sbin/iptables –X

#删除用户指定的链

/sbin/iptables –Z

#把所有链的包及字节的计数器清空

/sbin/iptables -P INPUT ACCEPT

/sbin/iptables -P FORWARD ACCEPT

/sbin/iptables -P OUTPUT ACCEPT

#指定默认的链 INPUT、FORWARD、OUTPUT都允许。

echo 1 > /proc/sys/net/ipv4/ip_forward

#开启内核包转发功能

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 10.1.10.173

#修改出去的192.168.1.*的包成转化为地址10.1.10.173出去

echo "60" > /proc/sys/net/ipv4/tcp_keepalive_time

#TCP链路保持连接时间60s

echo "45" > /proc/sys/net/ipv4/tcp_keepalive_intvl

#keepalive探测包的发送间隔

echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes

#如果对方不予应答,探测包的发送次数

iptables -t nat -A PREROUTING -d 10.1.10.173 -p tcp --dport 7001 -j DNAT --to 192.168.1.11:7001

iptables -t nat -A PREROUTING -d 10.1.10.173 -p tcp --dport 3389 -j DNAT --to 192.168.1.11:3389

#端口映射(-t 表nat, -A后面增加一条, PREROUTING 修改路由之前进入的包, -p 采用的tcp协议,--dport 端口号,-j 目标跳转,DNAT 进来的时候改变目的地址)对nat表增加一条进来的地址为10.1.10.173,端口为*的包跳转到内网地址的对应的端口。3389为远程桌面默认端口。

 

三、路由包转发说明
1、测试工作室机器互相访问

测试工作室的机器(IP为192.168.1.*)的机器访问同一网段的机器当然没有问题,默认路由表里面已经有了,192.168.1.*网段的数据包都通过eth1网卡转发。(没有这块网卡其实也是可以访问的,只不过是通过对局域网进行广播寻找到目的地址)。

2、测试工作室机器对公司内网访问

测试工作室的机器(192.168.1.*)的机器对公司内网机器(10.1.10.*)的访问,网卡自动识别目的地址为10.1.10.*的数据包,于是eth1就把数据表交给eth0,然后从eth0发给公司内网的机器。

3、公司内网通过端口访问测试工作室的机器

公司内网的机器(10.1.10.*)访问测试工作室的机器(192.168.1.*)时,并不能直接访问到192.168.1.*网段,因为我们的网关是10.1.10.254,他找不到测试工作室的网段。但是我们可以访问10.1.10.173,这块和我们同一个网段的网卡,同时也是路由的eth0外网卡,然后路由识别对10.1.10.173的访问,然后把包丢该eth1,eth1按照我们设置好的规则(脚本里面的规则),把对不同端口访问的数据包丢给相应的测试工作室的机器。

 

其中需要说明的重点:

1、“开启内核包转发功能”,路由才会去把两个网段之间访问的数据在两块网卡之间转发。

2、我们发送的数据都是被打包分成很多很多小的数据包转发的,数据包里面包含了源地址、目的地址、校验码等等信息。数据包通过网卡转发的时候,网卡会修改这些信息,以实现我们夸网段的访问。

比如192.168.1.2访问10.1.10.6,数据包地址经过一次192.168.1.2转换为10.1.10.173,由eth0发给10.1.10.6,当返回请求的数据包到达10.1.10.173,网卡了解到请求是192.168.1.2发出的,所以再把10.1.10.173地址修改为192.168.1.2交给eth1去转发给192.168.1.2。

这些都是基于TCP/IP协议的访问。

 

由此我们还可以自己思考下,测试工作室的机器(IP为192.168.1.*)访问google的时候数据包经过eth1转发,再通过公司网关10.1.10.254伪装成公司公网地址*.*.*.*转发,当我们的请求返回的时候可想而知数据包包含的信息量,以及TCP/IP这些底层协议的奇妙。

 

阅读(907) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~