Linux双网卡路由器配置

Linux双网卡路由器配置

一、测试工作室的网络要求:

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

      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这些底层协议的奇妙。

你可能感兴趣的:(linux,编程)