![EC2(VPC)主机上的多个 IP 地址的路由问题](https://linux22.com/image/799871/EC2%EF%BC%88VPC%EF%BC%89%E4%B8%BB%E6%9C%BA%E4%B8%8A%E7%9A%84%E5%A4%9A%E4%B8%AA%20IP%20%E5%9C%B0%E5%9D%80%E7%9A%84%E8%B7%AF%E7%94%B1%E9%97%AE%E9%A2%98.png)
我们运行一个 EC2 Ubuntu 服务器,作为我公司应用程序中 NAT 遍历机制的 STUN 服务器。根据 STUN 协议的性质,服务器需要两个 IP 公共地址。我们聘请了一些顾问来为我们设置这个,但他们似乎失败了,因为 STUN 服务器没有响应任何外部绑定请求。
以下是我们所知的信息:
- 我们有两个 EIP 映射到服务器(同一个网络接口)。
- 该服务器在 VPC 子网内运行。
- 如果我们在 STUN 服务器本地发送 STUN 绑定请求(通过向 STUN 客户端指定其中一个 EIP),它就会成功。
- 如果我们从其他 EC2 服务器(VPC 子网之外)发出相同请求,则请求会失败。
- 如果我们从办公室的台式计算机发出同样的请求,则会失败。
- STUN 服务器正在接收绑定请求,但似乎无法路由响应。以下是 Wireshark 对绑定请求期间创建的转储文件的解析截图。
我猜我们的路由表中缺少了一些东西。不幸的是,IP 路由不是我们的核心能力之一(尤其是在 Linux 上)。以下是 ifconfig 的输出,希望它能为您提供一些更有用的信息。
eth0 Link encap:Ethernet HWaddr 0e:5a:ec:5d:6d:d5
inet addr:10.0.0.22 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::c5a:ecff:fe5d:6dd5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:28031 errors:0 dropped:0 overruns:0 frame:0
TX packets:18370 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2329243 (2.3 MB) TX bytes:19316360 (19.3 MB)
Interrupt:28
eth0:1 Link encap:Ethernet HWaddr 0e:5a:ec:5d:6d:d5
inet addr:10.0.0.23 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:28
eth0:2 Link encap:Ethernet HWaddr 0e:5a:ec:5d:6d:d5
inet addr:107.23.130.153 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:28
eth0:3 Link encap:Ethernet HWaddr 0e:5a:ec:5d:6d:d5
inet addr:107.23.35.233 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:28
以下是运行的输出sudo route
:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.0.1 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 * 255.255.255.0 U 0 0 0 eth0
答案1
10.0.0.1是你的默认网关,107.23.XX网络上有路由器吗?
我感觉您需要设置适当的路由表,以确保进入一个网络的数据包也通过同一网络上的同一接口返回。
你可以做这样的事情:
echo 200 Ten >> /etc/iproute2/rt_tables
ip route add 107.23.130.153 dev eth0:2 src 107.23.130.153 table Ten
ip route add default via whatever table Ten
echo 200 Twenty >> /etc/iproute2/rt_tables
ip route add 107.23.35.233 dev eth0:3 src 107.23.35.233 table Twenty
ip route add default via whatever table Twenty
用这两个地址的网关替换任何内容,我假设它们是点对点地址。
然后添加通过正确的表和接口从您的 IP 发送流量的规则。
ip rule add from 107.23.130.53 table Ten
ip rule add from 107.23.35.233 table Twenty
无论如何,网上有很多信息,可以查一下策略路由