У меня есть сеть с несколькими VLAN и соответствующими подсетями. В одной VLAN у меня есть HDHomerun, который использует широковещательную передачу на порт 65001 для обнаружения, а во второй VLAN у меня есть клиенты, которым я хотел бы получить доступ к HDHomerun. Я установил socat и настроил следующее ...
/usr/bin/socat -d -d -d -d -lf /var/log/socat.log udp4-recvfrom:65001,broadcast,fork udp4-sendto:10.0.6.109:65001
... где 65001 - это порт, на котором ожидается широковещательная передача, а 10.0.6.109 - это внутренний IP-адрес HDHomerun в VLAN one. Это работает на Ubiquiti EdgeRouter 4, который отвечает за обе VLAN. С socat, работающим в этом методе, я не могу обнаружить свой HDHomerun.
Я запускаю socat, как показано выше, а затем пытаюсь обнаружить с устройства в VLAN 2, отслеживая журналы, я вижу, что socat принимает широковещательную передачу и пытается обработать ее, но клиент никогда не подключается к HDHomerun. Я не знаком с журналами socat, но я вижу ссылку на устройство, на котором работает клиент, в качестве источника (10.0.5.101) и socat, пытающийся получить информацию об адресе для 10.0.6.109 (IP-адрес HDHomerun), но есть также пара сообщений «Транспортная конечная точка не подключена» (хотя похоже, что socat просто рассматривает эти информационные сообщения, поэтому, возможно, это отвлекающий маневр), и я вижу адрес подстановочного знака (0.0.0.0) в журналах, и я не уверен, как это здесь вступает в игру. Может ли кто-нибудь с большим опытом чтения журналов socat помочь мне понять, что здесь происходит не так?
HDHomerun работает правильно, и если я нажимаю на него напрямую, не требуя обнаружения, все работает нормально, так что, похоже, это ограничивается процессом обнаружения (и, соответственно, socat обрабатывает широковещательную передачу на 65001).
журналы:
2019/09/22 13:40:35 socat[3432] D select -> (, 0x10, 0x0, 0x0, NULL/0.000000), 1
2019/09/22 13:40:35 socat[3432] D recvmsg(4, 0x7faaed50{0x7faaeddc,112,0x7faaed0c,1,0x7faaf34c,1024,0}, 34)
2019/09/22 13:40:35 socat[3432] D recvmsg(, {AF=2 10.0.5.101:54796,16,,1,,0,}, ) -> 20
2019/09/22 13:40:35 socat[3432] N receiving packet from AF=2 10.0.5.101:54796
2019/09/22 13:40:35 socat[3432] I permitting packet from AF=2 10.0.5.101:54796
2019/09/22 13:40:35 socat[3432] D setenv("SOCAT_PEERADDR", "10.0.5.101", 1)
2019/09/22 13:40:35 socat[3432] D setenv() -> 0
2019/09/22 13:40:35 socat[3432] D setenv("SOCAT_PEERPORT", "54796", 1)
2019/09/22 13:40:35 socat[3432] D setenv() -> 0
2019/09/22 13:40:35 socat[3432] D sigprocmask(1, 0x7faaf14c, (nil))
2019/09/22 13:40:35 socat[3432] D sigprocmask() -> 0
2019/09/22 13:40:35 socat[3432] D fork()
2019/09/22 13:40:35 socat[3432] D fork() -> 3515
2019/09/22 13:40:35 socat[3432] N forked off child process 3515
2019/09/22 13:40:35 socat[3515] D fork() -> 0
2019/09/22 13:40:35 socat[3432] D sigprocmask(2, 0x7faaf14c, (nil))
2019/09/22 13:40:35 socat[3515] D getpid()
2019/09/22 13:40:35 socat[3432] D sigprocmask() -> 0
2019/09/22 13:40:35 socat[3515] D getpid() -> 3515
2019/09/22 13:40:35 socat[3432] D sleep(4294967295)
2019/09/22 13:40:35 socat[3515] I just born: client process 3515
2019/09/22 13:40:35 socat[3515] D setenv("SOCAT_PID", "0", 1)
2019/09/22 13:40:35 socat[3515] D setenv() -> 0
2019/09/22 13:40:35 socat[3515] D sigprocmask(2, 0x7faaf14c, (nil))
2019/09/22 13:40:35 socat[3515] D sigprocmask() -> 0
2019/09/22 13:40:35 socat[3515] D getppid()
2019/09/22 13:40:35 socat[3515] D getppid() -> 3432
2019/09/22 13:40:35 socat[3515] D calloc(1, 720)
2019/09/22 13:40:35 socat[3515] D calloc() -> 0xa46e18
2019/09/22 13:40:35 socat[3515] D malloc(832)
2019/09/22 13:40:35 socat[3515] D malloc() -> 0xa47100
2019/09/22 13:40:35 socat[3515] D getaddrinfo("10.0.6.109", NULL, {5,2,1,17,0,(nil),(nil),(nil)}, 0x7faaf74c)
2019/09/22 13:40:35 socat[3515] D getaddrinfo(,,,{{AF=2 10.0.6.109:0, }) -> 0
2019/09/22 13:40:35 socat[3515] D socket(2, 1, 17)
2019/09/22 13:40:35 socat[3515] I socket(2, 1, 17) -> 5
2019/09/22 13:40:35 socat[3515] D fcntl(5, 2, 1)
2019/09/22 13:40:35 socat[3515] D fcntl() -> 0
2019/09/22 13:40:35 socat[3515] D getsockname(5, 0x7faaf614, 0x7faaf610{112})
2019/09/22 13:40:35 socat[3515] D getsockname(, {AF=2 0.0.0.0:0}, {16}) -> 0
2019/09/22 13:40:35 socat[3515] N successfully prepared local socket AF=2 0.0.0.0:0
2019/09/22 13:40:35 socat[3515] I resolved and opened all sock addresses
2019/09/22 13:40:35 socat[3515] D malloc(16385)
2019/09/22 13:40:35 socat[3515] D malloc() -> 0xa47448
2019/09/22 13:40:35 socat[3515] N starting data transfer loop with FDs [4,4] and [5,5]
2019/09/22 13:40:35 socat[3515] D data loop: sock1->eof=0, sock2->eof=0, closing=0, wasaction=1, total_to={0.000000}
2019/09/22 13:40:35 socat[3515] D select(6, &0x30, &0x30, &0x0, NULL/0.000000)
2019/09/22 13:40:35 socat[3515] D select -> (, 0x10, 0x30, 0x0, NULL/0.000000), 3
2019/09/22 13:40:35 socat[3515] D recvmsg(4, 0x7faaeda4{0x7faaee30,112,0x7faaed64,1,0x7faaf430,1024,0}, 34)
2019/09/22 13:40:35 socat[3515] D recvmsg(, {AF=2 10.0.5.101:54796,16,,1,,0,}, ) -> 20
2019/09/22 13:40:35 socat[3515] D recvfrom(4, 0xa47448, 8192, 0, 0x7faaee30, 112)
2019/09/22 13:40:35 socat[3515] D recvfrom(,,,, {2,AF=2 10.0.5.101:54796}, 16) -> 20
2019/09/22 13:40:35 socat[3515] N received packet with 20 bytes from AF=2 10.0.5.101:54796
2019/09/22 13:40:35 socat[3515] D kill(3432, 16)
2019/09/22 13:40:35 socat[3515] D kill() -> 0
2019/09/22 13:40:35 socat[3432] D xiosigaction_hasread(16, {16,0,0,3515}, )
2019/09/22 13:40:35 socat[3515] D sendto(5, 0xa47448[0002000c...], 20, 0, {AF=2 10.0.6.109:65001}, 16)
2019/09/22 13:40:35 socat[3432] D xiosigaction_hasread() ->
2019/09/22 13:40:35 socat[3432] D sleep() -> 4294967295
2019/09/22 13:40:35 socat[3432] I continue listening
2019/09/22 13:40:35 socat[3515] D sendto() -> 20
2019/09/22 13:40:35 socat[3432] N receiving on AF=2 0.0.0.0:65001
2019/09/22 13:40:35 socat[3515] D getsockname(5, 0x7faaf6bc, 0x7faaf6b8{112})
2019/09/22 13:40:35 socat[3432] D select(5, &0x10, &0x0, &0x0, NULL/0.000000)
2019/09/22 13:40:35 socat[3515] D getsockname(, {AF=2 0.0.0.0:43388}, {16}) -> 0
2019/09/22 13:40:35 socat[3515] N local address: AF=2 0.0.0.0:43388
2019/09/22 13:40:35 socat[3515] I transferred 20 bytes from 4 to 5
2019/09/22 13:40:35 socat[3515] N socket 1 (fd 4) is at EOF
2019/09/22 13:40:35 socat[3515] I shutdown(5, 1)
2019/09/22 13:40:35 socat[3515] D shutdown() -> -1
2019/09/22 13:40:35 socat[3515] I shutdown(5, 1): Transport endpoint is not connected
2019/09/22 13:40:35 socat[3515] D data loop: sock1->eof=2, sock2->eof=0, closing=1, wasaction=1, total_to={0.000000}
2019/09/22 13:40:35 socat[3515] D select(6, &0x20, &0x0, &0x0, &0.500000)
2019/09/22 13:40:35 socat[3432] D select -> (, 0x10, 0x0, 0x0, NULL/0.000000), 1
2019/09/22 13:40:35 socat[3432] D recvmsg(4, 0x7faaed50{0x7faaeddc,112,0x7faaed0c,1,0x7faaf34c,1024,0}, 34)
2019/09/22 13:40:35 socat[3432] D recvmsg(, {AF=2 10.0.5.101:54796,16,,1,,0,}, ) -> 20
2019/09/22 13:40:35 socat[3432] N receiving packet from AF=2 10.0.5.101:54796
2019/09/22 13:40:35 socat[3432] I permitting packet from AF=2 10.0.5.101:54796
2019/09/22 13:40:35 socat[3432] D setenv("SOCAT_PEERADDR", "10.0.5.101", 1)
2019/09/22 13:40:35 socat[3432] D setenv() -> 0
2019/09/22 13:40:35 socat[3432] D setenv("SOCAT_PEERPORT", "54796", 1)
2019/09/22 13:40:35 socat[3432] D setenv() -> 0
2019/09/22 13:40:35 socat[3432] D sigprocmask(1, 0x7faaf14c, (nil))
2019/09/22 13:40:35 socat[3432] D sigprocmask() -> 0
2019/09/22 13:40:35 socat[3432] D fork()
2019/09/22 13:40:35 socat[3432] D fork() -> 3516
2019/09/22 13:40:35 socat[3432] N forked off child process 3516
2019/09/22 13:40:35 socat[3516] D fork() -> 0
2019/09/22 13:40:35 socat[3516] D getpid()
2019/09/22 13:40:35 socat[3432] D sigprocmask(2, 0x7faaf14c, (nil))
2019/09/22 13:40:35 socat[3516] D getpid() -> 3516
2019/09/22 13:40:35 socat[3432] D sigprocmask() -> 0
2019/09/22 13:40:35 socat[3516] I just born: client process 3516
2019/09/22 13:40:35 socat[3432] D sleep(4294967295)
2019/09/22 13:40:35 socat[3516] D setenv("SOCAT_PID", "0", 1)
2019/09/22 13:40:35 socat[3516] D setenv() -> 0
2019/09/22 13:40:35 socat[3516] D sigprocmask(2, 0x7faaf14c, (nil))
2019/09/22 13:40:35 socat[3516] D sigprocmask() -> 0
2019/09/22 13:40:35 socat[3516] D getppid()
2019/09/22 13:40:35 socat[3516] D getppid() -> 3432
2019/09/22 13:40:35 socat[3516] D calloc(1, 720)
2019/09/22 13:40:35 socat[3516] D calloc() -> 0xa46e18
2019/09/22 13:40:35 socat[3516] D malloc(832)
2019/09/22 13:40:35 socat[3516] D malloc() -> 0xa47100
2019/09/22 13:40:35 socat[3516] D getaddrinfo("10.0.6.109", NULL, {5,2,1,17,0,(nil),(nil),(nil)}, 0x7faaf74c)
2019/09/22 13:40:35 socat[3516] D getaddrinfo(,,,{{AF=2 10.0.6.109:0, }) -> 0
2019/09/22 13:40:35 socat[3516] D socket(2, 1, 17)
2019/09/22 13:40:35 socat[3516] I socket(2, 1, 17) -> 5
2019/09/22 13:40:35 socat[3516] D fcntl(5, 2, 1)
2019/09/22 13:40:35 socat[3516] D fcntl() -> 0
2019/09/22 13:40:35 socat[3516] D getsockname(5, 0x7faaf614, 0x7faaf610{112})
2019/09/22 13:40:35 socat[3516] D getsockname(, {AF=2 0.0.0.0:0}, {16}) -> 0
2019/09/22 13:40:35 socat[3516] N successfully prepared local socket AF=2 0.0.0.0:0
2019/09/22 13:40:35 socat[3516] I resolved and opened all sock addresses
2019/09/22 13:40:35 socat[3516] D malloc(16385)
2019/09/22 13:40:35 socat[3516] D malloc() -> 0xa47448
2019/09/22 13:40:35 socat[3516] N starting data transfer loop with FDs [4,4] and [5,5]
2019/09/22 13:40:35 socat[3516] D data loop: sock1->eof=0, sock2->eof=0, closing=0, wasaction=1, total_to={0.000000}
2019/09/22 13:40:35 socat[3516] D select(6, &0x30, &0x30, &0x0, NULL/0.000000)
2019/09/22 13:40:35 socat[3516] D select -> (, 0x10, 0x30, 0x0, NULL/0.000000), 3
2019/09/22 13:40:35 socat[3516] D recvmsg(4, 0x7faaeda4{0x7faaee30,112,0x7faaed64,1,0x7faaf430,1024,0}, 34)
2019/09/22 13:40:35 socat[3516] D recvmsg(, {AF=2 10.0.5.101:54796,16,,1,,0,}, ) -> 20
2019/09/22 13:40:35 socat[3516] D recvfrom(4, 0xa47448, 8192, 0, 0x7faaee30, 112)
2019/09/22 13:40:35 socat[3516] D recvfrom(,,,, {2,AF=2 10.0.5.101:54796}, 16) -> 20
2019/09/22 13:40:35 socat[3516] N received packet with 20 bytes from AF=2 10.0.5.101:54796
2019/09/22 13:40:35 socat[3516] D kill(3432, 16)
2019/09/22 13:40:35 socat[3516] D kill() -> 0
2019/09/22 13:40:35 socat[3432] D xiosigaction_hasread(16, {16,0,0,3516}, )
2019/09/22 13:40:35 socat[3516] D sendto(5, 0xa47448[0002000c...], 20, 0, {AF=2 10.0.6.109:65001}, 16)
2019/09/22 13:40:35 socat[3432] D xiosigaction_hasread() ->
2019/09/22 13:40:35 socat[3432] D sleep() -> 4294967295
2019/09/22 13:40:35 socat[3432] I continue listening
2019/09/22 13:40:35 socat[3516] D sendto() -> 20
2019/09/22 13:40:35 socat[3432] N receiving on AF=2 0.0.0.0:65001
2019/09/22 13:40:35 socat[3516] D getsockname(5, 0x7faaf6bc, 0x7faaf6b8{112})
2019/09/22 13:40:35 socat[3432] D select(5, &0x10, &0x0, &0x0, NULL/0.000000)
2019/09/22 13:40:35 socat[3516] D getsockname(, {AF=2 0.0.0.0:40407}, {16}) -> 0
2019/09/22 13:40:35 socat[3516] N local address: AF=2 0.0.0.0:40407
2019/09/22 13:40:35 socat[3516] I transferred 20 bytes from 4 to 5
2019/09/22 13:40:35 socat[3516] N socket 1 (fd 4) is at EOF
2019/09/22 13:40:35 socat[3516] I shutdown(5, 1)
2019/09/22 13:40:35 socat[3516] D shutdown() -> -1
2019/09/22 13:40:35 socat[3516] I shutdown(5, 1): Transport endpoint is not connected
2019/09/22 13:40:35 socat[3516] D data loop: sock1->eof=2, sock2->eof=0, closing=1, wasaction=1, total_to={0.000000}
2019/09/22 13:40:35 socat[3516] D select(6, &0x20, &0x0, &0x0, &0.500000)
2019/09/22 13:40:36 socat[3515] D select -> (, 0x0, 0x0, 0x0, &0.000000), 0
2019/09/22 13:40:36 socat[3515] I poll timed out (no data within 0.500000 seconds)
2019/09/22 13:40:36 socat[3515] I shutdown(5, 2)
2019/09/22 13:40:36 socat[3515] D shutdown() -> -1
2019/09/22 13:40:36 socat[3515] I shutdown(5, 2): Transport endpoint is not connected
2019/09/22 13:40:36 socat[3515] N exiting with status 0
2019/09/22 13:40:36 socat[3515] D exit(0)
2019/09/22 13:40:36 socat[3432] D xiosigaction_hasread(18, {18,0,1,3515}, )
2019/09/22 13:40:36 socat[3432] D waitpid(-1, 0x7faae7b8, 1)
2019/09/22 13:40:36 socat[3432] D waitpid(, {0}, ) -> 3515
2019/09/22 13:40:36 socat[3432] D waitpid(-1, 0x7faae7b8, 1)
2019/09/22 13:40:36 socat[3432] D waitpid(, {0}, ) -> 0
2019/09/22 13:40:36 socat[3432] I waitpid(-1, {}, WNOHANG): no child has exited
2019/09/22 13:40:36 socat[3432] I childdied() finished
2019/09/22 13:40:36 socat[3432] D xiosigaction_hasread() ->
2019/09/22 13:40:36 socat[3432] D select -> (, 0x10, 0x0, 0x0, NULL/0.000000), -1
2019/09/22 13:40:36 socat[3432] N receiving on AF=2 0.0.0.0:65001
2019/09/22 13:40:36 socat[3432] D select(5, &0x10, &0x0, &0x0, NULL/0.000000)
2019/09/22 13:40:36 socat[3516] D select -> (, 0x0, 0x0, 0x0, &0.000000), 0
2019/09/22 13:40:36 socat[3516] I poll timed out (no data within 0.500000 seconds)
2019/09/22 13:40:36 socat[3516] I shutdown(5, 2)
2019/09/22 13:40:36 socat[3516] D shutdown() -> -1
2019/09/22 13:40:36 socat[3516] I shutdown(5, 2): Transport endpoint is not connected
2019/09/22 13:40:36 socat[3516] N exiting with status 0
2019/09/22 13:40:36 socat[3516] D exit(0)
2019/09/22 13:40:36 socat[3432] D xiosigaction_hasread(18, {18,0,1,3516}, )
2019/09/22 13:40:36 socat[3432] D waitpid(-1, 0x7faae7b8, 1)
2019/09/22 13:40:36 socat[3432] D waitpid(, {0}, ) -> 3516
2019/09/22 13:40:36 socat[3432] D waitpid(-1, 0x7faae7b8, 1)
2019/09/22 13:40:36 socat[3432] D waitpid(, {0}, ) -> -1
2019/09/22 13:40:36 socat[3432] I waitpid(-1, {}, WNOHANG): No child processes
2019/09/22 13:40:36 socat[3432] I childdied() finished
2019/09/22 13:40:36 socat[3432] D xiosigaction_hasread() ->
2019/09/22 13:40:36 socat[3432] D select -> (, 0x10, 0x0, 0x0, NULL/0.000000), -1
2019/09/22 13:40:36 socat[3432] N receiving on AF=2 0.0.0.0:65001
2019/09/22 13:40:36 socat[3432] D select(5, &0x10, &0x0, &0x0, NULL/0.000000)