Маршрут на основе IP-адреса источника через 2 шлюза на одном сетевом адаптере

В системе Linux, которая действует как шлюз в моей локальной сети, я хотел бы маршрутизировать трафик на основе исходных IP-адресов.
У меня есть 2 сетевые карты, и одна из этих карт имеет 2 разных шлюза по умолчанию.

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

Я хотел бы убедиться, что компьютер с IP-адресом 192.168.3.5 может получить доступ и быть доступным через шлюз 172.16.62.254.
За eth0 есть VPN, который позволяет мне получить доступ к Интернету.

Настройка сетевых интерфейсов:

      DEVICE=eth0
TYPE=Ethernet
IPADDR=172.16.61.2
PREFIX=24
IPADDR2=172.16.61.3
PREFIX2=24
GATEWAY=172.16.61.1

DEVICE=eth0:1
TYPE=Ethernet
DEFROUTE=no
IPADDR=172.16.62.100
PREFIX=24
#GATEWAY=172.16.62.254

DEVICE=eth1
TYPE=Ethernet
IPADDR=192.168.3.1
NETMASK=255.255.255.0

Таблица маршрутизации:

      Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.16.62.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.61.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         172.16.61.1     0.0.0.0         UG    0      0        0 eth0

IP-адреса двух шлюзов:

      172.16.61.1
172.16.62.254

Компьютер с IP-адресом 192.168.3.2 должен достичь GW 172.16.61.1 ,
компьютер с IP-адресом 192.168.3.5 должен достичь GW 1 72.16.62.254 .

Чтобы разрешить доступ к двум шлюзам, я выполняю трансляцию IP-адресов через iptables:

      iptables -t nat -A POSTROUTING -s 192.168.3.2 -j SNAT --to-source 172.16.61.3  

и наоборот

      iptables -t nat -A PREROUTING -d 172.16.61.3 -j DNAT --to-destination 192.168.3.2  

Идея маршрутизации пакетов через шлюз 172.16.62.254 состоит в том, чтобы использовать iptables для маркировки пакетов, IP-адрес источника которых равен 192.168.3.5 или 172.16.62.100, а затем маршрутизировать их с помощью iproute2, для чего я выполнил следующие шаги:

  1. В /etc/iproute2/rt_tables я добавил строку200 route254

  2. Я пометил пакеты:

    iptables -t mangle -A OUTPUT -s 192.168.3.5 -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -s 172.16.62.100 -j MARK --set-mark 0x1

  3. Я настроил маршрутизацию с помощью:

    ip route add default via 172.16.62.254 dev eth0:1 table route254
    ip route add 172.16.62.0/24 dev eth0:1 src 172.16.62.100 table route254
    ip rule add from 172.16.62.100/32 table route254
    ip rule add to 172.16.62.100/32 table route254
    ip rule add prio 199 fwmark 0x1 lookup route254

Я получил то, что доступность к компьютеру с адресом 192.168.3.2 работает, компьютер доступен снаружи, а компьютер с адресом 192.168.3.5 - нет.

Вывод tcpdump в случае компьютера с адресом 192.168.3.2:

       18:38:31.317553 IP x.x.x.x.45053 > 172.16.61.3.ftp: S 3190836796:3190836796(0) win 5840 <mss 1380,sackOK,timestamp 2834368503 0,nop,wscale 7>  
 18:38:31.317832 IP x.x.x.x.45053 > 192.168.3.2.ftp: S 3190836796:3190836796(0) win 5840 <mss 1380,sackOK,timestamp 2834368503 0,nop,wscale 7>  
 18:38:31.317732 IP 192.168.3.2.ftp > x.x.x.x.45053: S 1998545683:1998545683(0) ack 3190836797 win 28960 <mss 1460,sackOK,timestamp 1123125 2834368503,nop,wscale 7>  
 18:38:31.317778 IP 172.16.61.3.ftp > x.x.x.x.45053: S 1998545683:1998545683(0) ack 3190836797 win 28960 <mss 1460,sackOK,timestamp 1123125 2834368503,nop,wscale 7>  
 18:38:31.368562 IP x.x.x.x.45053 > 172.16.61.3.ftp: . ack 1 win 46 <nop,nop,timestamp 2834368531 1123125>  
 18:38:31.368580 IP x.x.x.x.45053 > 192.168.3.2.ftp: . ack 1 win 46 <nop,nop,timestamp 2834368531 1123125>  
 18:38:33.257206 IP x.x.x.x.45053 > 172.16.61.3.ftp: P 1:3(2) ack 1 win 46 <nop,nop,timestamp 2834370444 1123125>

Вывод tcpdump в случае компьютера с адресом 192.168.3.5:

       12:49:04.047809 IP x.x.x.x.60804 > 172.16.62.100.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986198269 0,nop,wscale 7>  
 12:49:04.048069 IP x.x.x.x.60804 > 192.168.3.5.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986198269 0,nop,wscale 7>  
 12:49:04.047884 IP 192.168.3.5.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 922143 2986198269,nop,wscale 7>  
 12:49:04.047909 IP 172.16.62.100.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 922143 2986198269,nop,wscale 7>  
 12:49:05.448336 IP 192.168.3.5.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 923544 2986198269,nop,wscale 7>  
 12:49:05.448351 IP 172.16.62.100.ftp > x.x.x.x.60804: S 3787612501:3787612501(0) ack 790746701 win 28960 <mss 1460,sackOK,timestamp 923544 2986198269,nop,wscale 7>  
 12:49:07.048100 IP x.x.x.x.60804 > 172.16.62.100.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986201269 0,nop,wscale 7>  
 12:49:07.048128 IP x.x.x.x.60804 > 192.168.3.5.ftp: S 790746700:790746700(0) win 5840 <mss 1380,sackOK,timestamp 2986201269 0,nop,wscale 7>  

Чтобы проверить, действительно ли пакеты были помечены, я использовал:

      iptables -A INPUT -m mark ! --mark 0 -m limit --limit 8/min --limit-burst 12 -j LOG --log-prefix "IPTables-Marks: "  

но у меня нет записи в файле журнала

Как я могу разрешить компьютеру с IP-адресом 192.168.3.5 доступ и доступность через шлюз 172.16.62.254?

0 ответов

Другие вопросы по тегам