免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10264 | 回复: 19
打印 上一主题 下一主题

[网络管理] linux双网卡做NAT后的路由原路返回问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-18 13:37 |只看该作者 |倒序浏览
5可用积分
本帖最后由 huzhibin2000 于 2012-08-19 09:22 编辑

网络拓扑结构图:

  |   Internet     |
   |                  |
-------            --------
wan1|           wan2|
|Linux 主机,实现路由功能, 2个公网IP,不同ISP|
----------------------------------------------
        | Lan|
                |
                |
--------------------
内网,某些主机需要提供服务,外网可以访问
--------------------

由于需要把内网的服务提供给外网访问,因此,在linux路由主机上做了NAT,并对两个wan口做了策略路由。
现在的问题是:
当某个外网访问数据通过DNAT到达内网后,内网返回的数据包离开外网时,有可能从另外的网卡发回数据包(不是从接收它的那个外网卡),这样导致从这个ISP进入的包,应答发到了另外的ISP,导致包丢失。
(注:如果把服务直接放在linux路由主机上,已经不会发生前面的问题,只要经过NAT后,则发生以上现象,2个网卡中,总有一个外网卡不能正常,一个是正常的)

请问各位大侠,这个问题如何解决?

三棵杏流水账软件下载
三棵杏备忘精灵软件(提醒软件)下载
三棵杏网址导航

最佳答案

查看完整内容

iptables -t mangle -A PREROUTING -i WAN1dev -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x100iptables -t mangle -A PREROUTING -i WAN2dev -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x200iptables -t mangle -A POSTROUTING -o WAN1dev -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x100iptables -t mangle -A POSTROUTING -o WAN2dev -m conntrack --ctstate NEW -j CONNMARK --set- ...

论坛徽章:
0
2 [报告]
发表于 2007-04-18 13:37 |只看该作者
iptables -t mangle -A PREROUTING -i WAN1dev  -m conntrack  --ctstate NEW  -j CONNMARK --set-mark 0x100
iptables -t mangle -A PREROUTING -i WAN2dev  -m conntrack  --ctstate NEW  -j CONNMARK --set-mark 0x200

iptables -t mangle -A POSTROUTING -o WAN1dev  -m conntrack  --ctstate NEW  -j CONNMARK --set-mark 0x100
iptables -t mangle -A POSTROUTING -o WAN2dev  -m conntrack  --ctstate NEW  -j CONNMARK --set-mark 0x200
iptables -t mangle -A PREROUTING -i Landev  -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark

ip rule add prio 100 from  Wan1subnet subnet 100
ip rule add fwmark 0x100 prio 101 table 100
ip route add table 100 to Wan1subnet   dev WAN1dev  proto kernel  scope link
ip route add table 100 to Wan2subnet   dev WAN2dev  proto kernel  scope link
ip route add table 100 to Lansubnet   dev Landev  proto kernel  scope link
ip route add default via GW1 dev WAN1dev table 100

ip rule add  prio 100 from Wan2subnet subnet  200
ip rule add fwmark 0x200 prio 101 table 200
ip route add table 200 to Wan1subnet   dev WAN1dev  proto kernel  scope link
ip route add table 200 to Wan2subnet   dev WAN2dev  proto kernel  scope link
ip route add table 200 to Lansubnet   dev Landev  proto kernel  scope link
ip route add default via GW2 dev WAN2dev table 200


应该这样.

附:关于内核中conntrack的定义
It allows matching on additional conntrack information, which is                                                            x
useful in complex configurations, such as NAT gateways with multiple                                                        x
internet links or tunnels.

另外在2.4中早就有此模块.

[ 本帖最后由 wysilly 于 2007-4-25 20:46 编辑 ]

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
3 [报告]
发表于 2007-04-18 15:05 |只看该作者
在内网的服务器上安装双网卡配置不同的IP,在LINUX机器上针对不同的外网ISP,DNAT到不同的内网服务器上去。并且在LINUX机器上 针对不同的内网IP做不同的路由表。

论坛徽章:
0
4 [报告]
发表于 2007-04-18 16:52 |只看该作者
这个方案是可行的!非常非常感谢。
还有没有不用内网机器也装双网卡的解决方法?
用MARK目标去标记不同外网进入的包的mark值,然后ip rule fwmark value1 lockup eth1
ip rule fwmark value2 lockup eth2
我试过了不能解决该问题。

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
5 [报告]
发表于 2007-04-18 16:56 |只看该作者
单网卡配置子接口。。

论坛徽章:
0
6 [报告]
发表于 2007-04-18 18:17 |只看该作者
你这个问题简单,advanced routing里面的例子就是这个

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
7 [报告]
发表于 2007-04-18 20:34 |只看该作者
原帖由 Axin 于 2007-4-18 18:17 发表于 5楼  
你这个问题简单,advanced routing里面的例子就是这个


不一样的,LZ都说过了,服务器和路由器放到同一机器没有LZ说的问题。祸是加了NAT惹出来的。

论坛徽章:
0
8 [报告]
发表于 2007-04-18 23:06 |只看该作者

回复 #1 huzhibin2000 的帖子

你用的内核是什么版本的? 我自己写了一个patch可以解决这个问题

论坛徽章:
0
9 [报告]
发表于 2007-04-19 09:15 |只看该作者
原帖由 ssffzz1 于 2007-4-18 20:34 发表于 6楼  


不一样的,LZ都说过了,服务器和路由器放到同一机器没有LZ说的问题。祸是加了NAT惹出来的。



真没有看出来有啥不一样~~~

并且里面介绍的,就是在NAT模式下的,没有NAT你还实现不了。

论坛徽章:
0
10 [报告]
发表于 2007-04-20 15:46 |只看该作者

回复 #7 funix_zjx 的帖子

我的linux内核版本是2.4.20,红帽子9.0。谢谢关注.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP