我在两个 Linux 机器之间配置了 GRE 隧道。隧道运行正常。我可以从每个主机 ping 另一个私有 IP。
头部私有IP:10.0.0.1
公共IP:8.8.8.8
尾部私有IP:10.0.0.2
公共IP:7.7.7.7
Tail 上的公有 IP 具有通过 7.7.7.7 接口静态路由的网络块 9.9.9.0/23。其目的是使 9.9.9.0/23 ips 在 8.8.8.8 网络上的服务器上工作。
我配置尾部主机以路由 /23 块。我在头服务器上安装了 9.9 IP。我可以从尾部 ping 通 9.9 IP 到头部。
我无法从公共互联网 ping 9.9 ip。
我认为我需要添加一些其他路由,因为网关问题,但我似乎无法理解它(我不是路由器专家,只是想做一些我以前从未做过并且模糊理解的事情)
--丹克斯
答案1
有点晚了,但如果你还没有解决它,请按照以下方法操作:
鉴于你的例子只需替换:
- publicip:8.8.8.8 和 50.2.2.2
- publicip:7.7.7.7 和 70.2.2.3
- 私有 IP,可以是任何有效的私有地址。
- 私有 IP:10.0.201.1 和 10.0.201.2
公网 IP:
- A = 50.2.2.2-22
- B = 70.2.2.3
使用 GRE 进行隧道传输:
在 A:
# adding the interface for the tunnel
$ ip tunnel add tun2 mode gre remote 70.2.2.3 ttl 64
# setting the private ip address
$ ifconfig tun2 10.0.201.1/24
$ ifconfig tun2 up
# A point to point
$ ifconfig tun2 pointopoint 10.0.201.2
# enabling multicast (it's not necessary for this)
$ ifconfig tun2 multicast
$ ifconfig tun2 arp
$ ifconfig tun2 broadcast
# default route for the tunnel
$ ip route add 10.0.201.2 dev tun2
# enable ip forward
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# add the permanent entries to the arp table in order to get the complete loop. (without this doesn't work)
# replace the public ips for your ips, and the mac for your real mac for your interface
# the word pub it's the most important here, if it's not there the arps will never go outside
$ arp -s 50.2.2.20 00:00:00:00:00:00 -i eth0 pub
$ arp -s 50.2.2.21 00:00:00:00:00:00 -i eth0 pub
$ arp -s 50.2.2.22 00:00:00:00:00:00 -i eth0 pub
在 B 上:
# adding the interface for the tunnel
$ ip tunnel add tun2 mode gre remote 50.2.2.2 ttl 64
# setting the private ip address
$ ifconfig tun2 10.0.201.2/24
$ ifconfig tun2 up
# point to point B
$ ifconfig tun2 pointopoint 10.0.201.1
# enabling multicast (it's not necessary for this)
$ ifconfig tun2 multicast
$ ifconfig tun2 arp
$ ifconfig tun2 broadcast
# default route for the tunnel
$ ip route add 10.0.201.1 dev tun2
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# putting the ips to listen in the eth0 as secondary ips
$ ip ad add 50.2.2.20/32 dev eth0
$ ip ad add 50.2.2.21/32 dev eth0
$ ip ad add 50.2.2.22/32 dev eth0
就这样,您应该拥有一个功能齐全的隧道,并且能够路由远离您想要使用它们的 IP,因此您现在可以开始将一些守护进程绑定到这些 IP。
另外要记住的一点是,如果您有这么多 IP,那么您必须小心点 A 上的广播域,如果您计划隧道传输超过 500 个 IP,那么您必须更改 Linux 的 arp 表的默认值以保留所有条目:
$ echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
$ echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
$ echo 16384 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
资料来源:
- http://www.lartc.org/lartc.html
- http://linux-ip.net/gl/ip-tunnels/node9.html
- http://yurisk.info/2009/12/15/arp-table-overflow-in-checkpoint-nad-linux-in-general/
- http://kainlite.blogspot.com.ar/2012/05/ip-tunneling-on-linux-lets-suppose-that.html
我很久以前就在寻找同样的东西,然后发现了你的帖子。
答案2
路线需要存在于两个方向,贯穿整个路径。从您的描述中,我不太确定到底是什么出了问题。