如同这请求(我认为)我希望看到绑定到某个端口号的流量通过一个特定接口路由,而特定 IP 的流量通过另一个接口路由。我尝试执行此操作的服务器全新安装了 Ubuntu 14.04.2,因此我拥有大量工具来完成该任务。然而,我对网络没有太多经验,所以我不知道从哪里开始。 =)
提前致谢!
编辑:
一些细节,因为它们很重要。
me@server:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 54:9f:35:0a:6a:20 brd ff:ff:ff:ff:ff:ff
inet 10.22.89.50/24 brd 10.22.89.255 scope global em1
valid_lft forever preferred_lft forever
inet6 fe80::569f:35ff:fe0a:6a20/64 scope link
valid_lft forever preferred_lft forever
(...)
6: p1p1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:0f:53:2d:4b:80 brd ff:ff:ff:ff:ff:ff
inet 10.22.52.199/26 brd 10.22.52.192 scope global p1p1
valid_lft forever preferred_lft forever
7: p1p2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:0f:53:2d:4b:81 brd ff:ff:ff:ff:ff:ff
inet 10.22.52.200/26 brd 10.22.52.192 scope global p1p2
valid_lft forever preferred_lft forever
我想路由所有发往74.120.50.7
through的流量p1p2
以及发往端口上任何 IP 的所有流量7047
through p1p1
。
答案1
好的:首先,您在同一子网上有两个具有连续 IP 地址的接口 - 如果您尝试在它们之间分散负载以获得更高的吞吐量(例如,您想要将两个千兆位 NIC 变成一个 2 千兆位 NIC),则有更好的方法来做到这一点!一般术语是“结合”。搜索“网络绑定”或“NIC 绑定”来查找一些内容。
假设这不是您正在做的事情,接下来要注意的是 Linux 下的默认设置是将 IP 地址视为绑定到主机,不是到一个接口。有一个/proc
条目可以更改此设置:/proc/sys/net/ipv4/conf/«INTERFACE»/arp_filter
;将其设置为 1 以禁用此行为。你可能需要这样做。
最后,您可能只是编写了一些连续的私有 IP 地址,并在您的问题中使用它们来编辑您的实际 IP,并且这两个接口不在同一子网上。在这种情况下,请忽略上述内容,但请将来使用不同的私有子网以避免混淆。
无论如何,在您的情况下,有一些事情与您链接到的问题有所不同——这些答案中的其他内容应该适用。
如果这两个端口位于同一以太网网络上(例如,插入同一交换机),则交换机实际上决定将流量发送到哪个端口。除非你有昂贵的开关,否则他们会这样做仅有的基于目标 MAC 地址。我确信有人制作了一个可以查看 TCP 端口号的交换机,但我敢打赌它并不便宜。
默认情况下,路由器发送数据到你的服务器只关心目标IP地址。为了获得“所有传入端口 7047 上到 10.22.52.199 或 10.22.52.200 的流量会转到 10.22.52.199”,您必须说服您的路由器这样做...这可能并不容易。
传出流量到 74.120.50.7 应该相当容易:
ip route add 74.120.50.7/32 via «ROUTER» dev p1p2 src 10.22.52.200
。指定发送数据的设备和源 IP;我很确定这会让它从那个界面出来。 (/32 是 255.255.255.255 网络掩码,即只有一个地址)。您需要填写“ROUTER”的下一跳路由器。 (可能在某处称为“默认网关”)。同样,对于端口号:在额外的路由表中(来自链接问题的答案)添加
dev p1p1 src 10.22.52.199
.如果上面的方法有效,那么这也应该有效。
您可以确认流量正在正确的接口上流动,例如:tcpdump -p -i INTERFACE