>Synopsis: UDP divert-to rule: getsockname(2) won't show original
destination
>Category: kernel amd64
>Environment:
System : OpenBSD 7.1-beta
Details : OpenBSD 7.1-beta (GENERIC) #353: Sun Feb 20 17:14:05
MST 2022
Architecture: OpenBSD.amd64
Machine : amd64
>Description:
getsockname(2) won't show the original destination address/port for a
UDP inet packet redirected using a PF divert-to rule to a local
socket.
This works as expected for TCP.
>How-To-Repeat:
server:
(pf.conf)
pass in on vio0 inet proto udp from any to 100.64.0.100 divert-to 127.0.0.1
port 9000
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> s.bind(("127.0.0.1", 9000))
>>> s.recvfrom(1024)
(b'data\n', ('100.64.0.1', 16079))
>>> s.getsockname()
('127.0.0.1', 9000)
client:
$ echo data | nc -u 100.64.0.100 12345
>Fix:
Unknown.