![aws ec2:通过公共 IP 地址在实例之间建立 ipip 隧道](https://linux22.com/image/737258/aws%20ec2%EF%BC%9A%E9%80%9A%E8%BF%87%E5%85%AC%E5%85%B1%20IP%20%E5%9C%B0%E5%9D%80%E5%9C%A8%E5%AE%9E%E4%BE%8B%E4%B9%8B%E9%97%B4%E5%BB%BA%E7%AB%8B%20ipip%20%E9%9A%A7%E9%81%93.png)
有人能告诉我这是否可行吗?假设:
- 有两个 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。
再次感谢你。