Итак, у меня есть устройство (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 не должен маршрутизировать задание на печать?Как я могу направить задание на печать на мой локальный хост, чтобы я мог связываться с данными?Я поступаю об этом неправильно?
Любое понимание помогает!