У меня есть сервер, на котором должны выполняться тесты передачи. Этот сервер имеет 3 сетевых интерфейса (172.16.10.205 для SSH, 10.0.4.105 для отправки, 10.0.8.105 для приема)
to satellite from satellite
/\ \/
/\ \/
|-----------| |-------------|
| Modulator | | Demodulator |
|-----------| |-------------|
10.0.4.244 10.0.8.27
\ /
\ /
(eno7) 10.0.4.105 10.0.8.105 (eno8)
|------------|
| Server |
|------------|
172.16.10.205 (eno1)
На сервере я установил следующие правила, маршруты:
# ip rule
100: from 10.0.8.105 to 10.0.8.105 lookup 250
30000: from all lookup local
32766: from all lookup main
32767: from all lookup default
# ip route show table 250
default via 10.0.4.244 dev eno7
10.0.8.105 via 10.0.4.244 dev eno7
Я начал ITGSend
поток в Модулятор:
ITGSend -a 10.0.8.105 -Sda 172.16.10.205 -c 600 -C 20 -t 2000 -poll
и получение ITGRecv
поток из Демодулятора:
ITGRecv -l itgrecv_kkr.log -q 1 -a 10.0.8.105 -i eno8
На tcpdump
это выглядит неплохо ...
# tcpdump -i eno8 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno8, link-type EN10MB (Ethernet), capture size 262144 bytes
10:34:32.538165 ARP, Request who-has 10.0.8.105 tell 10.0.8.27, length 46
10:34:32.538190 ARP, Reply 10.0.8.105 is-at 00:25:90:5d:df:ad, length 28
10:34:32.538276 IP 10.0.8.105.60367 > 10.0.8.105.8999: UDP, length 600
10:34:32.588162 IP 10.0.8.105.60367 > 10.0.8.105.8999: UDP, length 600
10:34:32.637465 IP 10.0.8.105.60367 > 10.0.8.105.8999: UDP, length 600
..но по какой-то причине ITGRecv
не получает данных ...
ОБНОВИТЬ: Я пробовал второй вариант использования, чтобы убедиться, что входящие данные не обрабатываются заданным правилом:
1) Мне нужно создать правило, которое local
правило, которое обрабатывает локальные интерфейсы (выполняется local
= 30000 и новое правило = 100):
ip rule del from all lookup local
ip rule add from all lookup local pref 30000
ip rule add from all fwmark 0x1 lookup 250 pref 100
2) Это новое правило отправляет пакеты в таблицу маршрутизации 250, только если для параметра MARK установлено значение 1. Это выполняется с помощью iptables
- отмечая все исходящие пакеты на данный IP-адрес:
iptables -A OUTPUT -t mangle -p all -d 10.0.8.105 -j MARK --set-mark 1
3) На последнем этапе я создаю маршрут, который перенаправляет все (отмеченные) пакеты на устройство модулятора:
ip route add default via 10.0.4.244 dev eno7 table 250
Но все равно безуспешно - посылки прибывают в eno8
правильно, но iperf -s
не получает их.
В соответствии с ip-sysctl.txt ядро отбрасывает пакеты, поступающие из локального интерфейса. Отключение этой опции позволит отправлять с INTERFACE1 на INTERFACE2 те же пакеты хоста:
accept_local - BOOLEAN
Accept packets with local source addresses. In combination with
suitable routing, this can be used to direct packets between two
local interfaces over the wire and have them accepted properly.
default FALSE