aws ec2:通过公共 IP 地址在实例之间建立 ipip 隧道

aws ec2:通过公共 IP 地址在实例之间建立 ipip 隧道

有人能告诉我这是否可行吗?假设:

  • 有两个 ec2 实例
    • 在一个 aws 账户/vpc 中。
    • 位于不同的子网/可用区域。
    • 在 CentOS 7 上运行。
  • 由于某种原因,需要通过实例的公共 IP 地址在实例之间创建 ipip 隧道。
  • 并且隧道无法通行。
    • 相关网络 acl 和安全组明确允许所有流量。
    • 每个 ec2 实例上均禁用 iptables/firewalld。
    • 当隧道通过他们的公共地址时,它实际上可以很好地工作。

详细地说,我按照下面所述尝试过,但没有成功:

  • 实例#1:

    • 公网IP地址:xxxx(弹性IP地址)
  • 实例 #2:

    • 公网 IP 地址:yyyy(非弹性 IP 地址)
  • 在实例#1上添加隧道:

$ sudo ip tunnel add tun0 mode ipip remote y.y.y.y local x.x.x.x
$ sudo ip address add 192.168.1.11 peer 192.168.2.11 dev tun0
$ sudo ip link set mtu 1480 dev tun0
$ sudo ip link tun0 up
$ ip address show
(snip)
4: tun0@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip x.x.x.x peer y.y.y.y
    inet 192.168.1.11 peer 192.168.2.11/32 scope global tun0
       valid_lft forever preferred_lft forever
  • 在实例#2上添加隧道:
$ sudo ip tunnel add tun0 mode ipip remote x.x.x.x local y.y.y.y
$ sudo ip address add 192.168.2.11 peer 192.168.1.11 dev tun0
$ sudo ip link set mtu 1480 dev tun0
$ sudo ip link tun0 up
$ ip address show
(snip)
4: tun0@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip y.y.y.y peer x.x.x.x
    inet 192.168.2.11 peer 192.168.1.11/32 scope global tun0
       valid_lft forever preferred_lft forever
  • 在实例#1上测试:
$ ping 192.168.2.11
PING 192.168.2.11 (192.168.2.11) 56(84) bytes of data.
^C
--- 192.168.2.11 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms
  • 在实例#2上测试:
$ ping 192.168.1.11
PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data.
^C
--- 192.168.1.11 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

如有任何答案/建议我们将不胜感激,谢谢。

答案1

非常感谢 Michael,您的评论就是全部。在这里我将引用它并结束这个问题:

sudo ip tunnel add tun0 mode ipip remote xxxx local yyyy 这里,你应该使用 xxxx = remote public 但 yyyy = local private。Internet 网关知道本地实例的公共 IP,但本地实例不知道其自己的公共 IP。

再次感谢你。

相关内容