GRE隧道到本地主机


0

我正在尝试使用GRE隧道(或TAP)将本地Linux网络名称空间轻量级VM连接到本地HOST计算机。看起来一切正常,除了主机的答复不会使其返回虚拟机。

我的设置:

主机真实IP: 10.1.101.101/24

主机GRE(安装类似):

ip l add dev gre1 type gretap remote 10.1.101.101 local 10.1.101.101 key 101
ip a add dev gre1 10.201.0.2/24
ip l set dev gre1 up

主机网络配置:

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:30:1b:42:65:ac brd ff:ff:ff:ff:ff:ff
    inet 10.1.101.101/24 brd 10.1.101.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::230:1bff:fe42:65ac/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:50:04:d0:50:0f brd ff:ff:ff:ff:ff:ff

82: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN group default 
    link/gre 0.0.0.0 brd 0.0.0.0
83: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
84: gre1@NONE: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65494 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether e2:83:0d:a4:cc:23 brd ff:ff:ff:ff:ff:ff
    inet 10.201.0.2/24 scope global gre1
       valid_lft forever preferred_lft forever
    inet6 fe80::e083:dff:fea4:cc23/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever

寄宿路线:

ip r
default via 10.1.101.1 dev eth0 
10.1.101.0/24 dev eth0  proto kernel  scope link  src 10.1.101.101 
10.201.0.0/24 dev gre1  proto kernel  scope link  src 10.201.0.2 
169.254.0.0/16 dev eth0  scope link  metric 1000 

HOST iptables的是空白(IE: iptables -F

VM网络配置:

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN group default 
    link/gre 0.0.0.0 brd 0.0.0.0
3: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
114: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:00:00:aa:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.201.0.1/24 brd 10.201.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:ff:feaa:0/64 scope link 
       valid_lft forever preferred_lft forever

虚拟机路由:

ip r
10.201.0.0/24 dev eth0  proto kernel  scope link  src 10.201.0.1 

现在10.201.0.2从VM ping HOST 10.201.0.1并捕获数据包:

tcpdump -ni gre1 在主机上:

11:57:36.379404 ARP, Request who-has 10.201.0.2 tell 10.201.0.1, length 28
11:57:36.379431 ARP, Reply 10.201.0.2 is-at e2:83:0d:a4:cc:23, length 28
11:57:36.379455 ARP, Reply 10.201.0.2 is-at e2:83:0d:a4:cc:23, length 28
11:57:37.376634 ARP, Request who-has 10.201.0.2 tell 10.201.0.1, length 28
11:57:37.376658 ARP, Reply 10.201.0.2 is-at e2:83:0d:a4:cc:23, length 28
11:57:37.376683 ARP, Reply 10.201.0.2 is-at e2:83:0d:a4:cc:23, length 28
11:57:38.376539 ARP, Request who-has 10.201.0.2 tell 10.201.0.1, length 28
11:57:38.376567 ARP, Reply 10.201.0.2 is-at e2:83:0d:a4:cc:23, length 28
11:57:38.376596 ARP, Reply 10.201.0.2 is-at e2:83:0d:a4:cc:23, length 28

tcpdump -ni eth0 在VM上:

11:57:36.379243 ARP, Request who-has 10.201.0.2 tell 10.201.0.1, length 28
11:57:37.376384 ARP, Request who-has 10.201.0.2 tell 10.201.0.1, length 28
11:57:38.376384 ARP, Request who-has 10.201.0.2 tell 10.201.0.1, length 28

那么,AFAICS VM将ARP请求发送到HOST,HOST(正确地)回答了ARP,但是ARP数据包没有使其通过GRE隧道返回吗?

注1:VM由称为CORE Emulator的产品创建,由连接到GRE节点基本路由器组成,该节点指向,密钥为10110.1.101.101

注意2:如果不是在本地使用Core Emulator,而是在其他计算机上运行它,但使用所有相同的设置,则相同的配置可以正常工作(使用10.1.101.101)。

我还尝试将HOST GRE隧道设置为:

ip l add gre1 type gretap remote 127.0.0.1 local 127.0.0.1 key 101

和VM GRE节点指向127.0.0.1

但是我得到相同的结果,ARP被HOST看到并答复,但VM 却不到。

编辑1:
为了回答我的“现实世界”问题,CORE确实为我提供了如下所述的合适解决方案:https : //downloads.pf.itd.nrl.navy.mil/docs/core/core-html/usage .html#other-methods

编辑2:随后的问题?
“ Linux容器/网络名称空间/ LXC”等VM是否可以通过GRE隧道与HOST计算机通信。GRE隧道的端点会是这样的HOST:127.0.0.1,以VM:?.?.?.?(这些问号使我的结论是,虽然虚拟机可能能够发送到127.0.0.1的主机没有返回路径的虚拟机,这可能是为什么ARP,在我的第一个问题中,它没有连接到VM)。

感谢您抽出宝贵的时间阅读本文档,对您的帮助非常感谢。

Answers:


1

部分答案:GRE隧道可在普通连接之上运行,并为您提供了额外的网络接口,该接口可在网络数据包中添加/删除隧道标头。

因此,在两台机器A和B之间建立隧道的常规设置如下:

1)检查A和B是否具有“正常” IP地址并且可以互相看到。例如,如果A的IP为“ 10.0.0.1/24”,B的eth0IP为IP“ 10.0.0.2/24” eth0,则ping 10.0.0.2在A上进行A,ping 10.0.0.1在B 上进行a 。

2)在A上添加具有A的本地IP和B的远程IP的隧道设备,向接口添加新的IP:

ip link add dev gre0 type gretap remote 10.0.0.2 local 10.0.0.1 key 123
ip addr add 10.0.44.1/24 dev gre0 
ip link set gre0 up

3)对于B相同,但具有适当的IP地址:

ip link add dev gre0 type gretap remote 10.0.0.1 local 10.0.0.2 key 123
ip addr add 10.0.44.2/24 dev gre0
ip link set gre0 up

4)ping 10.0.44.2在A和ping 10.0.44.1B 上进行操作,以查看隧道是否正常工作。

如您所见,这不是您的设置:HOST上的隧道的本地和远程地址是相同的,VM上的隧道没有本地和远程地址,VM上的隧道接口已关闭,并且属于该隧道的IP地址以结束eth0。这些都不是真正有意义的,因此它不起作用也就不足为奇了。

我不知道Core Emulator如何处理“ GRE节点”,但是从您显示的配置来看,这似乎只是用于配置GRE接口的一层。因此,要么弄清楚Core Emulator如何处理这些问题,要么忘记仿真器中的“ GRE节点”,然后手动进行配置。

更好的做法是,配置两个在Core Emulator中连接的VM A和B,然后如上所述手动添加GRE隧道。这是一种对称的情况,应该避免造成混乱。


嗨,我首先尝试了您的“锻炼”,它确实在两个VM(A和B)之间设置了一个简单的GRE隧道,并且两端均可ping通等。我必须更深入地研究“ CORE”问题。我还将在原始问题中添加更多细节。
dotvotdot

仅供参考:ip add dev gre0 foo应该ip addr add dev gre0 foo..我对您的帖子的修改被拒绝。
dotvotdot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.