我启用了两个节点 A(172.31.17.22) 和 B(172.31.16.9) 之间的数据包转发,但是数据包没有被转发,并且节点 B 上的 tcpdump 没有显示任何不属于自己的流量:ping 172.31.16.9 -c 1 (直接从 A 到 B)
A 上的 Tcpdump ( tcpdump -e icmp -I eth0):
0e:34:43:04:5c:8c (oui Unknown) > 0e:b8:b3:ed:48:10 (oui Unknown),以太类型 IPv4 (0x0800),长度 98:ip-172-31-17-22 .ec2.internal > ip-172-31-16-9.ec2.internal:ICMP 回显请求,id 28945,seq 1,长度 64
0e:b8:b3:ed:48:10 (oui Unknown) > 0e:34:43:04:5c:8c (oui Unknown),以太类型 IPv4 (0x0800),长度 98:ip-172-31-16-9 .ec2.internal > ip-172-31-17-22.ec2.internal:ICMP 回显回复,id 28945,seq 1,长度 64
在 B 上:
0e:34:43:04:5c:8c (oui Unknown) > 0e:b8:b3:ed:48:10 (oui Unknown),以太类型 IPv4 (0x0800),长度 98:ip-172-31-17-22 .ec2.internal > ip-172-31-16-9.ec2.internal:ICMP 回显请求,id 28945,seq 1,长度 64
0e:b8:b3:ed:48:10 (oui Unknown) > 0e:34:43:04:5c:8c (oui Unknown),以太类型 IPv4 (0x0800),长度 98:ip-172-31-16-9 .ec2.internal > ip-172-31-17-22.ec2.internal:ICMP 回显回复,id 28945,seq 1,长度 64
现在,如果我想将数据包从 A 通过 B 转发到 C,我将在 A 上设置一条路由,以便将发往 C 的数据包首先发送到 B。因此,我在 A 上设置了一条路由,其中 C= 15.15.15.15。然后尝试ping:
sudo ip route add 15.15.15.15/32 via 192.168.7.234
Ping 15.15.15.15 -c 1
Run Code Online (Sandbox Code Playgroud)
A 上的 Tcpdump:
0e:34:43:04:5c:8c (oui Unknown) > 0e:b8:b3:ed:48:10 (oui Unknown),以太类型 IPv4 (0x0800),长度 98:ip-172-31-17-22 .ec2.internal > 15.15.15.15:ICMP 回显请求,id 28970,seq 1,长度 64
在 B 上,我们什么也看不到。这真的很奇怪,因为我们可以从 tcpdump 看到以太网地址完全相同。此外,我在我自己的网络上用另外两个 linux 节点运行了这个测试,并且可以从 B 看到,我们应该期待这样的事情:
... IPv4 (0x0800), 长度 98: 192.168.7.173 > 15.15.15.15: ICMP echo request, id 17443, seq 1, length 64 ... IPv4 (0x0800), length 118: 192.154.15.15. ICMP echo request, id 17443. . udp 端口 ntp 不可达,长度 84
在 AWS 上,我有一个规则,允许来自任何地方的 ICMP 连接……此外,我在两个节点上都设置了/etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
Run Code Online (Sandbox Code Playgroud)
我刷新了我的 iptables 规则(在两个节点上),以便允许转发:
[root@ip-172-31-16-9 ec2-user]# iptables -L
Chain INPUT (policy ACCEPT) target prot opt source
destinationChain FORWARD (policy ACCEPT) target prot opt source
destinationChain OUTPUT (policy ACCEPT) target prot opt source
destination
所以,我的结果是,在我的 LAN 上它可以工作,在 AWS EC2 上它不......那么 EC2 会阻止 ip 转发吗?
默认情况下,每个 EC2 实例都会执行源/目标检查。这意味着该实例必须是它发送或接收的任何流量的来源或目的地。但是,当源或目标不是自身时,NAT 实例必须能够发送和接收流量。因此,您必须在 NAT 实例上禁用源/目标检查。https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck
从 AWS CLI 禁用源/目标检查:
aws ec2 modify-instance-attribute --instance-id <instance_id> \
--no-source-dest-check
Run Code Online (Sandbox Code Playgroud)
要从EC2服务控制台禁用源/目标检查,请突出显示要禁用检查的实例。
然后选择:
在弹出窗口中选择是,禁用
| 归档时间: |
|
| 查看次数: |
2740 次 |
| 最近记录: |