通过私有 GRE 隧道进行公共 IP 路由

通过私有 GRE 隧道进行公共 IP 路由

我在两个 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

资料来源:

我很久以前就在寻找同样的东西,然后发现了你的帖子。

答案2

路线需要存在于两个方向,贯穿整个路径。从您的描述中,我不太确定到底是什么出了问题。

相关内容