Chinaunix

标题: linux下单网卡如何实现多网段ip互通访问 [打印本页]

作者: test_eaec01    时间: 2014-10-24 15:34
标题: linux下单网卡如何实现多网段ip互通访问
请教下各位,现有一台linux设备,双网卡,拿这台设备做NAT使用,eth1口为外网IP,eth0口为内网IP;
eth0口接入内网,内网下联接二层交换机,由于内网有不同IP网段,现在需要在这台Linux设备的eth0口上做路由,能够实现不同IP段的相互访问,



按照网络上找到的资料,linux设备,以下简称“设备”,对eth0口配置多IP地址,
eth0: 192.168.10.1/24
eth0:1 10.10.10.1/24

并增加路由
route add -net 192.168.10.0/24 gw 192.168.10.1;
route add -net 10.10.10.0/24 gw 10.10.10.1;

开启IP转发 ip_forward 为“1:

在pc 192.168.10.2中,设置GW为 192.168.10.1, 无法ping通10.10.10.2设备;
pc 10.10.10.2中,设置gw为10.10.10.1,同样无法ping通192.168.10.2

修改路由表,反向测试:
route add -net 10.10.10.0/24 gw 192.168.10.1;
route add -net 192.168.10.0/24 gw 10.10.10.1;
仍然无效;

抓包分析,10.10.10.2 ping向192.168.10.2设备的icmp报文已经到达192.168.10.2中,但没有回应报文,目前猜测是回路路由没有回指正确,但不知头绪在哪里,请各位指教下!
作者: test_eaec01    时间: 2014-10-24 16:53
回复 1# test_eaec01


    没有人吗?自己顶顶,请人指点下多谢
作者: little_angel    时间: 2014-10-24 17:30
你可以再Linux端做映射可以嘛?
作者: chenyx    时间: 2014-10-24 20:03
本帖最后由 chenyx 于 2014-10-24 20:26 编辑

你的下联的交换机支持Trunk不?如果支持的话,你得搜索linux 802.1q trunk,把Linux做成单臂路由.
作者: dengbao2001    时间: 2014-10-24 20:29
本帖最后由 dengbao2001 于 2014-10-24 20:29 编辑

我觉得最简单的办法不如给这台电脑加一个网卡,这样一定有效

或者按照楼上的Chenyx的方法设定下


作者: chenyx    时间: 2014-10-24 21:03
单网卡多网段按照楼主的做法应该是可以的,不知道楼主的交换机是否是智能的(也就是可以划分vlan的),我怀疑不通可能是Vlan的问题
作者: dengbao2001    时间: 2014-10-24 21:28
本帖最后由 dengbao2001 于 2014-10-25 08:58 编辑

有一点需要做一点提示,单网卡,连接多个网络,一定不要设定默认网关。手工定义路由,由路由来判断
作者: pheyx    时间: 2014-10-24 23:27
本帖最后由 pheyx 于 2014-10-24 23:28 编辑

。。。。。。。
作者: test_eaec01    时间: 2014-10-27 13:08
是我没有说清楚,二层交换机的上联口都是trunk, 设备的eth0口也是trunk不用考虑vlan不同的问题。
目前我配置完成,在设备上抓包,能够抓到icmp requset的报文。但没有icmp replay的报文。
作者: jixuuse    时间: 2014-10-27 13:50
如你图中所示拓扑的话,NAT设备上起两个子接口,打开ipv4forword,然后就和单臂路由的做法一样,下面的子网吧网关指向对应子网的子接口。
作者: test_eaec01    时间: 2014-10-27 16:41
好的,那我再去试试。抓包看看。
作者: abc3w    时间: 2014-10-27 20:29
本帖最后由 abc3w 于 2014-10-27 20:46 编辑

两个直联的网段不需要添加的路由,其它网络设置指向正确的网关就行。
如下:
192.168.10.2/24 gw 192.168.10.1
10.10.10.2/24 gw 10.10.10.1

测试到网关通讯:
192.168.10.2 ping 192.168.10.1  结果?
192.168.10.1 ping 192.168.10.2 结果?
10.10.10.2 ping 10.10.10.1 结果?
10.10.10.1 ping 10.10.10.2 结果?

网关内部转发如下(rhel6.5及之前版本):
允许单网卡转发(默认iptables规则各系统不一样,确保可靠启用,插入这条规则):
#iptables -I FORWARD -i eth0 -o eth0 -j ACCEPT  
启动系统转发支持(重启前有效,永久生效更改/etc/sysctl.conf 里 net.ipv4.ip_forward = 1 ):
#echo 1 > /proc/sys/net/ipv4/ip_forward

如交换机配置有vlan,交换机连接网关eth0的端口应配置为hybrid untag。
如还不通,贴出所有网络交换机配置及网关iptables规则。
作者: test_eaec01    时间: 2014-10-28 16:22
本帖最后由 test_eaec01 于 2014-10-28 16:25 编辑

回复 12# abc3w

按照您提到的进行测试,这里吧10.10.10.2, gw 10.10.10.1 修改为: 172.16.1.123 gw 172.16.1.1/24:

192.168.10.2/24 gw 192.168.10.1
172.16.1.123/24 gw 172.16.1.1

路由设置如下:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0               //eth0口IP主地址
172.16.12.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0             //eth0:1口IP地址
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth3
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1


测试到网关通讯:
192.168.10.2 ping 192.168.10.1  结果?,        通
192.168.10.1 ping 192.168.10.2 结果?           通
172.16.1.123 ping 172.16.1.1 结果?             通
172.16.1.1 ping 172.16.1.123 结果?               通




192.168.10.2 ping 172.16.1.123         不通,出现icmp: redirect 字样
在设备上抓包:
  1. [quote]16:11:38.779579 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 64, id 1420, len 60)
  2. 16:11:38.779677 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 63, id 1420, len 60)
  3. 16:11:43.437310 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 64, id 1421, len 60)
  4. 16:11:43.437354 192.168.10.1 > 192.168.10.2: icmp: redirect 172.16.1.123 to host 172.16.1.123 for 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 63, id 1421, len 60) [tos 0xc0]  (ttl 64, id 36801, len 88)
  5. 16:11:43.437377 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 63, id 1421, len 60)
  6. 16:11:48.437290 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 64, id 1422, len 60)
  7. 16:11:48.437328 192.168.10.1 > 192.168.10.2: icmp: redirect 172.16.1.123 to host 172.16.1.123 for 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 63, id 1422, len 60) [tos 0xc0]  (ttl 64, id 36802, len 88)
  8. 16:11:48.437388 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 63, id 1422, len 60)
  9. 16:11:53.437322 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 64, id 1423, len 60)
  10. 16:11:53.437361 192.168.10.1 > 192.168.10.2: icmp: redirect 172.16.1.123 to host 172.16.1.123 for 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 63, id 1423, len 60) [tos 0xc0]  (ttl 64, id 36803, len 88)
  11. 16:11:53.437382 192.168.10.2 > 172.16.1.123: icmp: echo request (ttl 63, id 1423, len 60)[/quote]
复制代码
172.16.1.123 ping 192.168.10.2         不通,出现icmp: redirect 字样

设备抓包如下:
  1. tcpdump: listening on eth0
  2. 16:14:06.912273 172.16.1.123 > 192.168.10.2: icmp: echo request (ttl 64, id 17003, len 60)
  3. 16:14:11.566822 172.16.1.123 > 192.168.10.2: icmp: echo request (ttl 64, id 17012, len 60)
  4. 16:14:11.566882 172.16.1.1 > 172.16.1.123: icmp: redirect 192.168.10.2 to host 192.168.10.2 for 172.16.1.123 > 192.168.10.2: icmp: echo request (ttl 63, id 17012, len 60) [tos 0xc0]  (ttl 64, id 18159, len 88)
  5. 16:14:16.566910 172.16.1.123 > 192.168.10.2: icmp: echo request (ttl 64, id 17027, len 60)
  6. 16:14:16.566948 172.16.1.1 > 172.16.1.123: icmp: redirect 192.168.10.2 to host 192.168.10.2 for 172.16.1.123 > 192.168.10.2: icmp: echo request (ttl 63, id 17027, len 60) [tos 0xc0]  (ttl 64, id 18160, len 88)
复制代码
网关内部转发如下(rhel6.5及之前版本):
允许单网卡转发(默认iptables规则各系统不一样,确保可靠启用,插入这条规则):
#iptables -I FORWARD -i eth0 -o eth0 -j ACCEPT  
规则已经添加
启动系统转发支持(重启前有效,永久生效更改/etc/sysctl.conf 里 net.ipv4.ip_forward = 1 ):

#echo 1 > /proc/sys/net/ipv4/ip_forward

转发规则已经开启

如交换机配置有vlan,交换机连接网关eth0的端口应配置为hybrid untag。
如还不通,贴出所有网络交换机配置及网关iptables规则。

交换机为2层傻瓜,无vlan其他配置。

iptables 规则如下:

[root@AllInOne ~]# iptables -vnL
Chain INPUT (policy ACCEPT 218K packets, 31M bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 3023K packets, 1580M bytes)
pkts bytes target     prot opt in     out     source               destination         
   10   600 ACCEPT     all  --  eth0   eth0    0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 257K packets, 44M bytes)
pkts bytes target     prot opt in     out     source               destination   

iptables -t nat -vnL

Chain PREROUTING (policy ACCEPT 68957 packets, 4737K bytes)
pkts bytes target     prot opt in     out     source               destination         
13161  820K ACCEPT     udp  --  eth0   *       0.0.0.0/0            202.106.0.20        udp dpt:53                             //dns解析用
    0     0 DNAT       tcp  --  eth1   *       0.0.0.0/0            192.168.1.222       tcp dpt:30001 to:172.16.12.2:80    //DNAT端口转发,无效
    0     0 DNAT       tcp  --  eth1   *       0.0.0.0/0            192.168.1.222       tcp dpt:30002 to:172.16.12.2:22    //DNAT转发,无效。
  256 15647 ACCEPT     udp  --  eth0   *       0.0.0.0/0            202.108.0.30        udp dpt:53                              //DNS
14279  987K DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           udp dpt:53 to:202.106.0.20           

Chain POSTROUTING (policy ACCEPT 6117 packets, 371K bytes)
pkts bytes target     prot opt in     out     source               destination         
84698 5222K SNAT       all  --  *      eth1    0.0.0.0/0            0.0.0.0/0           to:192.168.1.222                         //NAT规则,访问外网。

Chain OUTPUT (policy ACCEPT 6114 packets, 371K bytes)

无规则。
作者: test_eaec01    时间: 2014-10-28 16:27
请各位帮忙看看,多谢了
作者: abc3w    时间: 2014-10-28 17:49
客户机:172.16.1.123
traceroute  192.168.10.1  结果?

客户机: 192.168.10.2
traceroute 172.16.1.1   结果?
作者: test_eaec01    时间: 2014-10-29 16:53

作者: chenyx    时间: 2014-10-29 20:24
本帖最后由 chenyx 于 2014-10-29 20:25 编辑

这个确实停费解,数据包已经发送到你的Gateway了,但是没有走向下一条ip
这样,你先将iptables设置成全部允许(清除所有iptables规则)测试下
然后确认下ip_forward的值(sysctl -a | grep ip_forward)
作者: abc3w    时间: 2014-10-31 13:55
1,检查nat网关 ip_forware值
2,确定没有IP与nat网关冲突
3,检查nat网关 iptables nat 表
4,检查nat网关 路由表
作者: sgm277    时间: 2014-11-05 15:04
你这是一个典型的单臂路由架构啊。交换机肯定支持vlan吧,交换机所有互联的端口以及和linux互联的端口必须是trunk,而且你不配置vlan只是划分了多个网络没啥意义,因为在三层上它们是隔离的,但是二层上他们还在一个广播域。

如果你划分了vlan并且做了trunk, 那么linux端的配置就异常简单了:

1 modprobe  8021q //这个现在的linux系统都支持
2 linux 添加vlan:
   vconfig add eth0 100 //add VLAN 100
   vconfig add eth0 200 //add VLAN 200
3 配置IP(相当于单臂路由)
   ifconfig eth0.100  192.168.10.1 netmask 255.255.255.0 up //192.168.0.1 是该网段的GW
   ifconfig eth0.200  10.10.10.1 netmask 255.255.255.0 up //10.10.10.1是该网段的GW
4 打开linux路由功能:
   echo "1" >> /proc/sys/net/ipv4/ip_forward
5 设置nat
   iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

你按照这个试试?这样实现了vlan互通和客户端上网。
作者: bjstry    时间: 2014-11-05 18:51
回复 7# dengbao2001


    针对这一点,外网应该怎么配置呢,外网ip未知?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2