ChinaUnix首页 > 精华文章 > Linux > 正文

[保留] 双出口网络NAT实现方法请教![已解决]


http://www.chinaunix.net 作者:wualing  发表于:2006-12-01 12:51:36
发表评论】 【查看原文】 【Linux讨论区】【关闭

网络拓扑如下:

       |             |
       |             |
      eth1     eth3
      ---------------
      |                |
      |  firewall   |  
      ---------------
           eth0
             |
             |

     内网eth0:(192.168.0.0/24)   eth0:192.168.0.1
     教育eth3:(202.a.b.0/24)      eth3:202.a.b.1 网关202.a.b.254
     电信eth1:(61.c.d.0/24)       eth1:61.c.d.1  网关61.c.d.254

出口有教育网和电信网,教育网可以路由出去,电信网只能通过NAT出去
现在校内一个局域网想通过做NAT,实现局域网内的用户访问教育网从
教育网端口走,电信网从电信网端口走,这两个端口往出走的时候都
采用NAT的方式出去。

看了前边的帖子,自己也实验了好几种方式,但都没能成功,所以上来再问问

两种思路
1、一开始我的思路是只需要在fw上做路由缺省路由电信61.c.d.254,然后设置教育网络到
教育网出口202.a.b.254,在eth1和eth3上分别作SNAT,从两个地址出去。
具体做法是所有教育网网络路由走202.a.b.254,缺省路由走61.c.d.254,所有的路由信息
加在main表里。这种方法也成功了

#ip route  add to 58.154.0.0/15 via 202.a.b.254 table main
#ip route  add to 58.192.0.0/12 via 202.a.b.254 table main
                       。
                       。
                       。(省略若干行)
#ip route  add to 222.192.0.0/12 via 202.a.b.254 table main
#ip route  add default via 61.c.d.254 table main
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth3 -j SNAT --to 202.a.b.1
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to 61.c.d.1
#ip route flush cache
网络全部可以通,但是性能没有经过测试。

不知道有没有好的测试方法,另外那位给看看有没有需要改进或者更好的方法来实现。

2、看了前边的策略路由的帖子,不是很明白,按照说的做了一下,如下执行的,还是不行

# echo "200    NetEdu" >> /etc/iproute2/rt_tables
# ip route replace default via 202.a.b.254 table NetEdu
# ip rule add fwmark 1 table NetEdu
# iptables -t nat -F
# iptables -t mangle -F
# iptables -t mangle -A PREROUTING -i eth0 -s 192.168.0.0/24 -d 教育网网络 -j MARK --set-mark 1
   (中间的省略)
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 教育网网络 -j SNAT --to 202.a.b.1
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 61.c.d.1
# ip route flush cache

不知道为啥不通,如果要借助200    NetEdu这种ip rule的方式在nat的时候必需要--set-mark 1做这个吗
而且我看着每个教育网网络都要加SNAT的语句,不知道和方法1那一个性能更好一些

期待能有人指点一下,或者那位有更好的脚本最好能共享一下,先谢过了

[ 本帖最后由 wualing 于 2006-10-24 17:56 编辑 ]



 platinum 回复于:2006-10-24 12:40:34

不用那么麻烦,上面的方法是以前讨论过的策略路由的高级用法
你只需下面方法就可以

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
ip route replace default via 电信网关
ip route add 教育网地址 via 教育网网关



 wualing 回复于:2006-10-24 12:45:57

谢谢platinum,前边策略路由的方法看得稀里糊涂的,和这种简单方法实现有什么区别吗?


 sccdxp 回复于:2006-10-24 14:31:39

开机的时候运行一个脚本
然后设置默认网关是电信
下面包含了大部分的教育网地址

 

route add -net 58.192.0.0  netmask 255.240.0.0 gw 教育网网关
route add -net 59.64.0.0  netmask 255.240.0.0 gw 教育网网关
route add -net 121.48.0.0  netmask 255.254.0.0 gw 教育网网关
route add -net 125.216.0.0  netmask 255.248.0.0 gw 教育网网关
route add -net 162.105.0.0  netmask 255.255.0.0 gw 教育网网关
route add -net 166.111.0.0  netmask 255.255.0.0 gw 教育网网关
route add -net 202.4.128.0  netmask 255.255.224.0 gw 教育网网关
route add -net 202.38.2.0  netmask 255.255.254.0 gw 教育网网关
route add -net 202.38.64.0  netmask 255.255.192.0 gw 教育网网关
route add -net 202.38.140.0  netmask 255.255.254.0 gw 教育网网关
route add -net 202.38.184.0  netmask 255.255.248.0 gw 教育网网关
route add -net 202.38.192.0  netmask 255.255.192.0 gw 教育网网关
route add -net 202.112.0.0  netmask 255.248.0.0 gw 教育网网关
route add -net 202.120.0.0  netmask 255.254.0.0 gw 教育网网关
route add -net 202.127.216.0  netmask 255.255.248.0 gw 教育网网关
route add -net 202.127.224.0  netmask 255.255.224.0 gw 教育网网关
route add -net 202.179.240.0  netmask 255.255.240.0 gw 教育网网关
route add -net 202.192.0.0  netmask 255.240.0.0 gw 教育网网关
route add -net 203.91.120.0  netmask 255.255.248.0 gw 教育网网关
route add -net 210.25.0.0  netmask 255.255.0.0 gw 教育网网关
route add -net 210.26.0.0  netmask 255.254.0.0 gw 教育网网关
route add -net 210.28.0.0  netmask 255.252.0.0 gw 教育网网关
route add -net 210.32.0.0  netmask 255.240.0.0 gw 教育网网关
route add -net 211.64.0.0  netmask 255.248.0.0 gw 教育网网关
route add -net 211.80.0.0  netmask 255.248.0.0 gw 教育网网关
route add -net 218.192.0.0  netmask 255.248.0.0 gw 教育网网关
route add -net 219.216.0.0  netmask 255.248.0.0 gw 教育网网关
route add -net 219.224.0.0  netmask 255.248.0.0 gw 教育网网关
route add -net 219.242.0.0  netmask 255.254.0.0 gw 教育网网关
route add -net 219.244.0.0  netmask 255.252.0.0 gw 教育网网关
route add -net 222.16.0.0  netmask 255.240.0.0 gw 教育网网关
route add -net 222.192.0.0  netmask 255.240.0.0 gw 教育网网关


[ 本帖最后由 sccdxp 于 2006-10-24 14:34 编辑 ]


 platinum 回复于:2006-10-24 14:32:42

引用:原帖由 wualing 于 2006-10-24 12:45 发表
谢谢platinum,前边策略路由的方法看得稀里糊涂的,和这种简单方法实现有什么区别吗? 


有区别,前者的应用更灵活,可操作性更多,当然也更复杂更难理解


 wualing 回复于:2006-10-24 14:44:59

谢谢sccdxp,platinum,先用简单的做了,复杂的再慢慢测试!


 wualing 回复于:2006-10-24 15:55:22

路由还是按前边的那样,现在这样做了,只有教育的可以通,不知道什么原因

[root@FireWall shorewall]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
eth0_masq  all  --  0.0.0.0/0            0.0.0.0/0           
eth3_masq  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain eth0_masq (1 references)
target     prot opt source               destination         
SNAT       all  --  192.168.0.0/24      0.0.0.0/0           to:61.c.d.1

Chain eth3_masq (1 references)
target     prot opt source               destination         
SNAT       all  --  192.168.0.0/24      0.0.0.0/0           to:202.a.b.1
[root@FireWall shorewall]# 

教育网的可以通,电信的不通不知道怎么回事


 sccdxp 回复于:2006-10-24 16:59:22

电信的网关设置了没有呢?能ping通网关么?默认网关在/etc/sysconfig/network在这个地方设置。


 sccdxp 回复于:2006-10-24 17:01:50

然后在iptables的nat文件中只要这句吧
*nat
-A POSTROUTING -s 192.168.0.0/24  -j MASQUERADE
COMMIT
nat表中不需要那么复杂吧。

[ 本帖最后由 sccdxp 于 2006-10-24 17:04 编辑 ]


 wualing 回复于:2006-10-24 17:33:10

已经好了,但是有时候会不通,电信网关设置了用的是ip route replace设置的,因为是和shorewall防火墙一起用,所以这样比较统一一些

另外用ip route add 加的路由重启就没有了,如果不想加启动脚本的话,有没有办法,应该可以存在一个文件里边吧

[ 本帖最后由 wualing 于 2006-10-24 17:35 编辑 ]


 wualing 回复于:2006-10-24 17:55:46

引用:原帖由 sccdxp 于 2006-10-24 17:01 发表
然后在iptables的nat文件中只要这句吧
*nat
-A POSTROUTING -s 192.168.0.0/24  -j MASQUERADE
COMMIT
nat表中不需要那么复杂吧。 




这个方法是没问题提,改成上边的目的只是为了多实验实验,和shorewall结合使用起来。
谢谢各位的帮助。我自己在多试试吧!


 platinum 回复于:2006-10-24 19:10:45

我 2 楼的时候我就给过你答案了。。。。。。。


 yangprc 回复于:2006-10-24 19:36:36

我贴一下我的,也是教育网,不过另外的是网通.我开始还以为楼主也是天津的呢.呵呵 cernet是一个路由表.cernet-ip这个文件包含了教育网的ip地址段.
/sbin/ip route add 172.26.48.0/24 dev eth1 src 172.26.48.4 table cernet
/sbin/ip route add 218.68.241.0/24 dev eth0 src 218.68.241.155 table cernet
/sbin/ip route add default via 172.26.48.1 dev eth1 table cernet
ips=$(cat cernet-ip)
for ip in $ips
do
/sbin/ip rule add to $ip table cernet
done


 wualing 回复于:2006-10-24 21:17:30

谢谢yangprc和platinum。感谢yangprc的code。platinum的方式是操作最简单的了。


 huanghaojie 回复于:2006-10-27 16:14:25

一直没有这样的环境,但又非常想试,有没有什么模拟的方法可以用做这些东西呀。


 hnxhlgj 回复于:2006-10-28 11:06:47

楼上的哥哥可以说说你的具体方法吗?不知道你这种方法可以实现自动切换不,当一根线掉了可以自动上到别一个线上吗?


 hnxhlgj 回复于:2006-10-28 11:07:26

楼上的哥哥能帮我一下吗?我的QQ:363562852


 5iwww 回复于:2006-11-30 15:08:26

引用:原帖由 platinum 于 2006-10-24 12:40 发表
不用那么麻烦,上面的方法是以前讨论过的策略路由的高级用法
你只需下面方法就可以

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
ip route replace default via 电信网关
ip rou ... 




电信网关是指是什么?

内网eth0:(192.168.0.0/24)   eth0:192.168.0.1
     教育eth3:(202.a.b.0/24)      eth3:202.a.b.1 网关202.a.b.254
     电信eth1:(61.c.d.0/24)       eth1:61.c.d.1  网关61.c.d.254

网关61.c.d.254?还是eth1:61.c.d.1 ?  snat的时候如何判断是走eth3 还是走 eth1?


 5iwww 回复于:2006-11-30 15:26:25

如果你使用 -j MASQUERADE 做 NAT,那么你的数据包会根据不同的 nexthop 来动态修改 WAN 地址

希望这个就是答案。。。


 platinum 回复于:2006-11-30 15:42:17

引用:原帖由 5iwww 于 2006-11-30 15:26 发表
如果你使用 -j MASQUERADE 做 NAT,那么你的数据包会根据不同的 nexthop 来动态修改 WAN 地址

希望这个就是答案。。。 


恩,正是如此,MASQUERADE 会自动根据不同的 nexthop 去做相应的 SNAT


 bleach 回复于:2006-12-01 11:52:17

看以前的帖说 MASQUERADE 没有SNAT 速度快的噢 多了一个步骤


 platinum 回复于:2006-12-01 12:51:36

这是一个功能与性能权衡的问题了,其实慢也慢不了多少,但确实是慢,这点是可以肯定的




原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=846399
转载请注明作者名及原文出处