Jak kierować pakiety z interfejsów sieciowych do hosta lokalnego?


Konfiguruję Orange Pi, aby połączyć dwa interfejsy sieciowe. Jeden z nich jest podłączony do bramki, a drugi do interfejsu sieciowego termicznej drukarki pokwitowań. Chciałbym przechwytywać pakiety wysyłane z sieci, które są przeznaczone dla drukarki na porcie 9100, aby móc je zmodyfikować przed wysłaniem do drukarki.
Moja konfiguracja sprzętu wygląda następująco:
       eth1
podłączony do bramki,
       eth2
podłączony do termicznej drukarki pokwitowań ze statycznym IP
       192.168.0.20
.
Na moim Orange pi używam Linuksa 4.18.7 zbudowanego na bazie Yocto z pakietem obsługi płyty OpenEmbedded.
Podejmuję następujące kroki, aby zainicjować most:
brctl addbr kc_bridge
brctl addif kc_bridge eth1
brctl addif kc_bridge eth2
ifconfig kc_bridge up

W tym momencie mogę sprawdzić komunikację z drukarką z dowolnego urządzenia w tej samej sieci i wysłać ją do druku (np.
       echo "Hello World" | nc 192.168.0.20 9100
)
Następnie włączam routing do localhost, włączam przekazywanie IP i modprobe br_netfilter, aby włączyć routing mostkowy:
echo 1 >/proc/sys/net/ipv4/conf/all/route_localnet
echo 1 >/proc/sys/net/ipv4/ip_forward
modprobe br_netfilter

Następnie dodaję regułę iptables, która powinna zmienić adres docelowy na localhost dowolnego pakietu przeznaczonego dla drukarki na porcie 9100 i rozpocząć nasłuchiwanie na tym porcie:
iptables -t nat -A PREROUTING -d 192.168.0.20/32 -i kc_bridge -p tcp --dport 9100 -j DNAT --to-destination 127.0.0.1:9100
nc -l 9100

Spodziewałem się, że pokaże wszystkie dane, które są kierowane do lokalnego hosta, ale kiedy wysyłam dane do drukarki z innego urządzenia w tej samej sieci, nie pojawia się tutaj i nie drukuje.
Używając tcpdump widzę, że pakiety nie są kierowane do localhost i wydaje się, że połączenie nie zostało zainicjowane:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
09:31:14.821538 IP 192.168.0.50.43362 > 192.168.0.20.9100: Flags [S], seq 2236984100, win 64240, options [mss 1460,sackOK,TS val 3578716123 ecr 0,nop,wscale 7], length 0
09:31:15.839876 IP 192.168.0.50.43362 > 192.168.0.20.9100: Flags [S], seq 2236984100, win 64240, options [mss 1460,sackOK,TS val 3578717141 ecr 0,nop,wscale 7], length 0
09:31:17.856296 IP 192.168.0.50.43362 > 192.168.0.20.9100: Flags [S], seq 2236984100, win 64240, options [mss 1460,sackOK,TS val 3578719157 ecr 0,nop,wscale 7], length 0
09:31:22.020901 IP 192.168.0.50.43362 > 192.168.0.20.9100: Flags [S], seq 2236984100, win 64240, options [mss 1460,sackOK,TS val 3578723321 ecr 0,nop,wscale 7], length 0

Czego mi brakuje do kierowania pakietów z interfejsów sieciowych z mostkiem do hosta lokalnego?

Odświeżać
>
Używając polecenia iptables, mogę potwierdzić, że reguły iptables są wykonywane:
iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 400 packets, 77939 bytes)
pkts bytes target prot opt in out source destination
6 360 DNAT tcp -- kc_bridge * 0.0.0.0/0 192.168.0.20 tcp dpt:9100 to:127.0.0.1:9100Chain INPUT (policy ACCEPT 2 packets, 120 bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 291 packets, 25966 bytes)
pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 405 packets, 49112 bytes)
pkts bytes target prot opt in out source destination

Pakiety są akceptowane na wszystkich portach:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 9100 -j ACCEPT

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

  • Sprawdź liczniki
               DNAT         
    edytuj od
               iptables-save -c -t nat         
    zespół. Nie powinno być zerowe.
  • Musisz także zezwolić na przychodzące pakiety dla tego portu.

iptables -A INPUT -p tcp --dport 9100 -j ACCEPT

<ol start="3">
[*]
Użyj narzędzia conntrack, aby wyświetlić tabelę conntrack. Możesz użyć
           conntrack -E
Śledź wydarzenia związane z konfliktem w czasie rzeczywistym.
[/*]
[*]
Sprawdź wyjście
           ip route get 127.0.0.1 from 192.168.0.50 iif kc_bridge
zespół.
[/*]
[/list]

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się