Настройка маршрутизации для нескольких USB-модемов linux

Я пытаюсь создать собственный прокси-сервер. У меня есть коробка Rasp Pi с 2 USB-модемами LTE и подключенным к ней кабелем LAN. Я пытаюсь заставить их работать вместе с прокси-сервером squid, чтобы я мог отправлять трафик на конкретную сетевую карту модема в зависимости от внутреннего IP-адреса, также мне нужно иметь возможность адресовать панель администратора модема, чтобы иметь возможность программно сбросить ее, если она перестает работать должным образом. Итак, когда я подключаю только модем к рашпилу, я вижу, что на панели управления администратора указан адрес шлюза по умолчанию - 192.168.0.1, поэтому я решил, что могу продолжить с этой настройкой:

$: cat /etc/network/interfaces
source-directory /etc/network/interfaces.d

auto eth0
iface eth0 inet dhcp

allow-hotplug eth1
iface eth1 inet static
    address 192.168.1.100
    netmask 255.255.255.0

allow-hotplug eth2
iface eth2 inet static
    address 192.168.2.100
    netmask 255.255.255.0

$: ip route add 192.168.1.0/24 dev eth1 table rteth1
$: ip route add default via 192.168.1.1 dev eth1 table rteth1
$: ip route add 10.0.0.0/24 dev eth0 src 10.0.0.1 table rteth1
$: ip rule add from 192.168.1.0/24 table rteth1
$: ip rule add to 192.168.1.0/24 table rteth1
$: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
$: iptables -t mangle -A POSTROUTING -m ttl --ttl-gt 50 -o eth1 -j TTL --ttl-set 65

Такая же настройка для 192.168.2.0/24 сеть. Когда я настраиваю сеть таким образом и пытаюсь запросить панель администратора (192.168.1.1) - я получаю эту ошибку:

$: curl 192.168.1.1
curl: (7) Failed to connect to 192.168.1.1 port 80: No route to host

Когда я пытаюсь настроить ее с помощью: $: ip route добавить значение по умолчанию через 192.168.0.1 dev eth1 table rteth1

Я получаю: Ответы RTNETLINK: Сеть недоступна

Как правильно настроить такую ​​сеть?

-1
задан 5 February 2019 в 18:58
1 ответ

Я сам разобрался. Во-первых, мне нужно было установить ip адрес сетевой карты на адрес из подсети USB модема - ip 192.168.1.1 не будет работать, так что:

$: cat /etc/network/interfaces
source-directory /etc/network/interfaces.d

auto eth0
iface eth0 inet dhcp

allow-hotplug eth1
iface eth1 inet static
    address 192.168.0.100
    netmask 255.255.255.0

allow-hotplug eth2
iface eth2 inet static
    address 192.168.0.101
    netmask 255.255.255.0

Во-вторых, я пропустил локальное правило для трансляции ip адреса шлюза из одной подсети в другую, вот как это должно было быть раньше:

# Setup routing for NIC
$: ip route add 192.168.1.0/24 dev eth1 table rteth1
$: ip route add default via 192.168.0.1 dev eth1 table rteth1
$: ip route add 10.0.0.0/24 dev eth0 src 10.0.0.1 table rteth1
$: ip rule add from 192.168.1.0/24 table rteth1
$: ip rule add to 192.168.1.0/24 table rteth1
# Substitute sender ip addres by router ip address to recive back package
$: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Set up local routing, when requesting ip localy Substitute it
$: iptables -t nat -A OUTPUT -o eth1 -p tcp -d 192.168.1.1 -j DNAT --to-destination 192.168.0.1
# execute changes
ip route flush cache

Та же самая настройка для eth2 с сетью 192.168.2.0/24 и cetera. При такой настройке я могу вызвать конкретную приборную панель модема, сделав запрос curl 192.168.1/2.1. Раньше я не знал об очень удобной команде: tcpdump, с ее помощью мне удалось разобраться с проблемой:

$: tcpdump -i eth1
$: 05:28:30.685038 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:31.732788 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:32.772795 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:33.813216 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
0
ответ дан 5 December 2019 в 20:19

Теги

Похожие вопросы