有人能告诉我这是否可行吗?假设:
- 有两个 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。
再次感谢你。