免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 11573 | 回复: 43

[网络子系统] linux实现网桥和路由功能 [复制链接]

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2014-01-16 13:26 |显示全部楼层
30可用积分
本帖最后由 瀚海书香 于 2014-01-16 13:27 编辑

网络拓扑如下:

QQ截图20140116132219.jpg
linux服务器3个网口(eth0, eth1,eth2) 其中eth0和eth1组成网桥br0。
PC接到eth0, eth1接到路由器,默认PC上网的数据包通过网桥走。PC(192.168.1.2)去访问192.168.5.3的时候被路由器NAT为192.168.5.1

现在想让PC(192.168.1.2)去访问192.168.5.3的ssh的时候通过192.168.5.2访问
我在LINUX服务器上做了如下规则,我在pc上ssh 192.168.5.3,结果数据包匹配了两条规则,但是syn没有到192.168.5.3

#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp --dport 22 -j SNAT --to-source 192.169.5.2
#ebtables -t nat -A PREROUTING -p ipv4 --ip-proto tcp --ip-dport 23 -i eth2 -d ${MAC_ROUTE} -j dnat --to-destination ${MAC_LINUX_br0}

有人遇到过这种应用场景吗?

最佳答案

查看完整内容

回复 32# iceblood 终于搞定了,你再试试看。eth0接路由器eth2接内网

论坛徽章:
2
2015年亚洲杯之乌兹别克斯坦
日期:2015-04-15 15:43:482015亚冠之迪拜阿赫利
日期:2015-06-30 20:36:46
发表于 2014-01-16 13:27 |显示全部楼层
回复 32# iceblood
终于搞定了,你再试试看。
eth0接路由器
eth2接内网
  1. xxx@Ubuntu-Router:~$ cat br_start.sh
  2. #~ /bin/sh

  3. brctl addbr br0
  4. brctl addif br0 eth0
  5. brctl addif br0 eth2
  6. ifconfig eth1 192.168.1.4
  7. ifconfig br0 up 192.168.146.132
  8. ifconfig eth0 0.0.0.0
  9. ifconfig eth2 0.0.0.0

  10. ./br.sh
  11. xxx@Ubuntu-Router:~$ cat br.sh
  12. #! /bin/sh


  13. MAC_ROUTE='00:50:56:ef:22:cb'
  14. MARK_ID=7
  15. TABLE_ID=7

  16. if [ ! -n "$1" ]; then
  17. echo "set rules"
  18. TB_CMD=A
  19. IP_CMD=add
  20. else
  21. echo "delete rules"
  22. TB_CMD=D
  23. IP_CMD=del
  24. fi

  25. ebtables -t nat -${TB_CMD} PREROUTING -p IPv4 -d ${MAC_ROUTE} -i eth2 --ip-proto tcp --ip-dport 23 -j redirect
  26. iptables -t mangle -${TB_CMD} PREROUTING -m physdev --physdev-in eth2 -s 192.168.146.0/24 -p tcp --dport 23 -j MARK --set-mark ${MARK_ID}
  27. ip ru ${IP_CMD} fwmark ${MARK_ID} table ${TABLE_ID}
  28. ip ro ${IP_CMD} default via 192.168.1.1 dev eth1 table ${TABLE_ID}
  29. iptables -t nat -${TB_CMD} POSTROUTING -o eth1 -s 192.168.146.0/24 -p tcp --dport 23 -j MASQUERADE
复制代码

评分

参与人数 1可用积分 +10 收起 理由
瀚海书香 + 10 赞一个!

查看全部评分

论坛徽章:
0
发表于 2014-01-16 14:40 |显示全部楼层
版主 试试
iptables -t nat -A prerouting -p tcp -s 192.168.1.0/24 --dport 22 -j DNAT  --to 192.168.5.3:22
这样ok吗?

论坛徽章:
1
金牛座
日期:2014-05-29 15:55:47
发表于 2014-01-16 16:58 |显示全部楼层
不可以。将来外网不只有192.168.5.3这一台SSH,而是整个互联网的SSH

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
发表于 2014-01-17 11:10 |显示全部楼层
瀚海书香 发表于 2014-01-16 13:26
网络拓扑如下:

相关流程不是太熟哈,从调试的角度,
1、能否在LINUX服务器的eth2上抓一下,是否有发往192.168.5.3
2、如果没有,就需要在LINUX服务器的相关内核流程中打点跟一下数据流向了。

论坛徽章:
0
发表于 2014-01-17 14:16 |显示全部楼层
因为PC(192.168.1.2)是通过Linux Server的Bridge Port连接到网关192.168.1.1,所以Linux Server看不到PC发送报文的的三层信息而是直接Bridge 到192.68.1.1. iptables的规则不会用到,ebtable的规则可以。

论坛徽章:
0
发表于 2014-01-17 14:19 |显示全部楼层
建议在Linux Server上使用路由表来满足需求

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2014-01-17 15:59 |显示全部楼层
回复 5# hulidong971
因为PC(192.168.1.2)是通过Linux Server的Bridge Port连接到网关192.168.1.1,所以Linux Server看不到PC发送报文的的三层信息而是直接Bridge 到192.68.1.1. iptables的规则不会用到,ebtable的规则可以。


net.bridge.bridge-nf-call-iptables = 1

iptables的规则是用到的,而且通过命令查看,数据包匹配了iptables规则。

   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2014-01-17 16:00 |显示全部楼层
回复 6# hulidong971
建议在Linux Server上使用路由表来满足需求


可否大体说一下?
应该是网桥和路由配合的问题,只是修改路由表应该不行吧
   

论坛徽章:
0
发表于 2014-01-20 11:36 |显示全部楼层
数据在到路由器上,路由再发给server.
PC->路由器->server->ssh
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP