1

Я подключился к двум провайдерам и объявил им свое собственное пространство IP (/24 IPv4), поэтому оба провайдера направляют трафик, предназначенный моей подсети, на мой маршрутизатор (сервер Linux).

Два интернет-провайдера подключены к другому интерфейсу на маршрутизаторе Linux, скажем, eth0 и eth1 .

Теперь, когда я пытаюсь ping адрес, все, что я получаю, это время ожидания запроса. Однако, выполнив tcpdump , я вижу ответ удаленного компьютера, но не на том же интерфейсе, с которого маршрутизатор Linux отправляет запрос. (то есть отправка с eth0 , получение ответа на eth1):

eth0:

17:11:26.136885 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 1, length 64
17:11:27.139627 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 2, length 64
17:11:28.163632 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 3, length 64
17:11:29.187715 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 4, length 64
17:11:30.211766 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 5, length 64

eth1:

17:11:26.314683 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 1, length 64
17:11:27.317398 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 2, length 64
17:11:28.341461 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 3, length 64
17:11:29.365671 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 4, length 64
17:11:30.389885 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 5, length 64

Я попытался сделать политику маршрутизации:

ip rule add from x.x.x.x/24 lookup isp2 # where x.x.x.x is my subnet.
ip route add default via y.y.y.y dev eth1 table isp2 # where y.y.y.y is ISP2's gateway

Это заставляет ping работать нормально, но теперь любой пользователь, выбравший для входа мою AS с использованием ISP1 (eth0), не сможет ничего достичь.

Как я могу сообщить Linux, что eth0 и eth1 могут ответить на запрос?

1 ответ1

2

Я только что понял это. rp_filter должен быть отключен, чтобы разрешить ответ с другого пути:

for iface in eth{0,1}; do echo 0 > /proc/sys/net/ipv4/conf/$iface/rp_filter; done

Чтобы сделать его постоянным, установите net.ipv4.conf.<iface>.rp_filter = 0 в sysctl.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .