Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167681
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 399
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-04 15:36
文章分类

全部博文(24)

文章存档

2017年(2)

2015年(5)

2014年(9)

2013年(8)

我的朋友

分类: LINUX

2014-09-28 22:49:39

    最近在研究Linux tcp/ip协议栈和netfilter/iptables的知识,正好今天在公司帮助同事搭建一下测试环境,也用了用自己的所学,当然用google也可以完成同样的工作,但我更希望能理解其中的原理。
    需求是这样的:公司需要用广电的网络信号测试,但是广电的服务器端做了限制,只允许一根线接一个终端,所以问题就来了,几个同事如何同时工作呢?
    现有设备:一台广电网络信号专用Modem,虽然输出口有4个,但接两个终端上去,只有一个可以工作,而且用一般的路由器无法工作,原因是DHCP是定制过的,一般的DHCP程序无法从服务器获取到IP地址。
    解决方案:因为我们的盒子都跑Linux,而且盒子上有定制过的DHCP程序可以运行,有了Linux那就简单多了,用一台两个eth网口的盒子做网关,eth0用于连接modem,eht1用于连接交换机,终端设置静态IP方式,这样可以分更多的口出来连接终端,大家都可以一起用了,对于服务器端来说只会看到一个终端存在。大概框图如:

网络信号------->[modem] --------eth0-> [2*eth box0]  -eth1-------->[switch]===>box1,box2....boxN

下面的工作就是将box0配置成一个路由器,并且在eth0上运行udhcpc(定制过的),再将eth1配置成静态ip,并设置相关路由.
我这里在box0启动后最后执行的脚本中加入如下语句:

ifconfig eth0 up
udhcpc -i eth0 -t 50 &
sleep 1
route add -net 0.0.0.0 netmask 0.0.0.0 dev eth0

ifconfig eth1 10.3.1.1 netmask 255.255.255.0

echo "1">/proc/sys/net/ipv4/ip_forward
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

看上去确实很简单,其中的原理是
udhcpc //用于从广电的服务器上请求ip为eth0.
route add -net 0.0.0.0 netmask 0.0.0.0 dev eth0 //用于默认路由.
ifconfig eth1 10.3.1.1 netmask 255.255.255.0 //为eth1设置静态ip,可以用一根网线将电脑和盒子的eth1直连,然后给电脑设置静态ip 10.3.1.x/24,就可以在电脑上telnet到盒子上了.
echo "1">/proc/sys/net/ipv4/ip_forward // 打开网络协议栈的转发功能,因为从eth1进来的数据要从eth0出去,从eth0进来的数据又要走到eth1去.
iptables -F // 清除其它设置
iptables -P INPUT ACCEPT // 所以进来的数据全部通过
iptables -P FORWARD ACCEPT //转发的数据全部通过
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE // 对从eth0上出去的数据做snat,这一句很关键,这让这台盒子成了网关.

配置结束了,拿另一台盒子box1直接接到eth1,设置静态ip 10.3.1.2/24,默认dns开始工作了。

学到的知识可以解决实际问题,真是开心:)
阅读(2450) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~