Как использовать iptables для маршрутизации трафика на localhost по мосту eth0 eth1? - PullRequest
0 голосов
/ 19 сентября 2019

Итак, у меня есть устройство (Orange Pi R1), работающее под управлением Ubuntu Bionic, с двумя портами Ethernet eth0 и enxc0742bffe65d (eth1).У меня есть мост, который соединяет eth0 и eth1, так что данные могут проходить через.

Network <eth0> Device(br0) <eth1> Printer 10.0.0.1 127.0.0.1 10.0.0.170

Путь данных: данные отправлены на 10.0.0.170:9100, данные перехвачены на устройстве, отправлены на локальный хост (127.0.0.1:54001), данные изменены и затем отправлены10.0.0.170:9100.

Я хочу направить вещи, отправленные на IP-адрес принтера, на локальный хост устройства, который отправит его на сервер чашек на устройстве, который затем отправит его на принтер.Причина этого в том, что я настроил сервер печати, который изменяет данные печати при печати на них, а затем отправляет их на принтер.Я хотел создать устройство, которое вы могли бы просто подключить между любым принтером и сетью, и оно будет перехватывать задания на печать и вносить изменения.В идеале без устройства, имеющего IP.У меня работает мост, на котором я могу печатать на принтере, пока принтер подключен к eth1, я могу наблюдать, как пакеты проходят через мост через tcpdump, но я не могу переслать их на локальный хост для обработки.

Вот как выглядит мой / etc / interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto enxc0742bffe65d
iface enxc0742bffe65d inet manual


# Bridge setup
auto br0
iface br0 inet dhcp
   bridge_ports eth0 enxc0742bffe65d

вывод ifconfig:

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::42:3fff:fe17:767  prefixlen 64  scopeid 0x20<link>
        ether 02:42:3f:17:07:67  txqueuelen 1000  (Ethernet)
        RX packets 460  bytes 97623 (97.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10  bytes 796 (796.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enxc0742bffe65d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::c274:2bff:feff:e65d  prefixlen 64  scopeid 0x20<link>
        ether c0:74:2b:ff:e6:5d  txqueuelen 1000  (Ethernet)
        RX packets 114  bytes 76509 (76.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 418  bytes 40561 (40.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::42:3fff:fe17:767  prefixlen 64  scopeid 0x20<link>
        ether 02:42:3f:17:07:67  txqueuelen 1000  (Ethernet)
        RX packets 398  bytes 38969 (38.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 127  bytes 77497 (77.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 34

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Как я пытался настроить свои iptables:

iptables -t nat -I PREROUTING -p tcp -i br0 -d 10.0.0.170 -j DNAT --to-destination 127.0.0.1:54001
iptables -t nat -A POSTROUTING -j MASQUERADE
sysctl -w net.ipv4.conf.eth0.route_localnet=1

Вот что я получаю, наблюдая за мостом (br0) во время печати с помощью tcpdump:

root@orangepi:~# tcpdump -s0 -i br0 port 9100
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:47:23.619176 IP 10.0.0.167.15829 > 10.0.0.170.9100: Flags [S], seq 638481252, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
22:47:23.620444 IP 10.0.0.170.9100 > 10.0.0.167.15829: Flags [S.], seq 2423176889, ack 638481253, win 1460, options [mss 1460,nop,wscale 0], length 0
22:47:23.620643 IP 10.0.0.167.15829 > 10.0.0.170.9100: Flags [.], ack 1, win 1026, length 0
22:47:23.620787 IP 10.0.0.167.15829 > 10.0.0.170.9100: Flags [P.], seq 1:67, ack 1, win 1026, length 66
22:47:23.620856 IP 10.0.0.167.15829 > 10.0.0.170.9100: Flags [F.], seq 67, ack 1, win 1026, length 0
22:47:23.622054 IP 10.0.0.170.9100 > 10.0.0.167.15829: Flags [.], ack 68, win 1394, length 0
22:47:23.625205 IP 10.0.0.170.9100 > 10.0.0.167.15829: Flags [.], ack 68, win 64240, length 0
22:47:23.626015 IP 10.0.0.170.9100 > 10.0.0.167.15829: Flags [F.], seq 1, ack 68, win 64240, length 0
22:47:23.626243 IP 10.0.0.167.15829 > 10.0.0.170.9100: Flags [.], ack 2, win 1026, length 0

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

Любое понимание помогает!

...