0

I have a server on which a transmission benchmarks shall be performed. This server has 3 network interfaces (172.16.10.205 for SSH, 10.0.4.105 for sending, 10.0.8.105 for receiving)

                  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)

On the server I ve setup the following rules, routes:

# 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

I ve started a ITGSend stream to the Modulator:

ITGSend -a 10.0.8.105 -Sda 172.16.10.205 -c 600 -C 20 -t 2000 -poll

and receiving the ITGRecv stream from the Demodulator:

ITGRecv -l itgrecv_kkr.log -q 1 -a 10.0.8.105 -i eno8

On tcpdump this looks quite good...

# 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

..but for some reason, ITGRecv receives no data...

UPDATE: I ve tried a second use-case, to ensure that the incoming data are not handled by the given rule:

1) I have to create a rule which is befor the local rule which handles the local interfaces (done by local=30000 and new-rule=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) This new rule sends packages to routing-table 250 only, when a MARK is set to 1. This is done by iptables - by marking all outgoing packets to the given IP address:

iptables -A OUTPUT -t mangle -p all -d 10.0.8.105 -j MARK --set-mark 1

3) In a last step I create a route which redirects all (marked) packets to the modulator device:

ip route add default via 10.0.4.244 dev eno7 table 250

But still no success - the packages arrive at eno8 correctly, but iperf -s doesn't receive them.

Charly
  • 101
  • 2

1 Answers1

0

According to ip-sysctl.txt the kernel drops packets which come from a local interface. Disabling this option will allow to send from INTERFACE1 to INTERFACE2 of the same host packages:

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
Charly
  • 101
  • 2