EDIT: Never mind: I got it working with the GIThub version.
I just hard coded the arguments in UDP-proxy-2020.service and it works fine. Used it with multiple devices including one where one remote device send music to another. Seems to work fine and repeatably.
thank you for sharing this @Francesco ! for me Udp-proxy works via the command line through SSH. but following your route, and the one on the github, i cannot get UDP proxy to load.
pi@raspberrypi:/etc/systemd/system $ systemctl status udp-proxy-2020.service
● udp-proxy-2020.service - UDP Proxy 20202
Loaded: loaded (/usr/lib/systemd/system/udp-proxy-2020.service; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2021-04-17 10:32:54 BST; 5min ago
Docs: GitHub - synfinatic/udp-proxy-2020: A crappy UDP router for the year 2020 and beyond
Process: 934 ExecStart=/usr/local/bin/udp-proxy-2020 ${ARGS} (code=exited, status=203/EXEC)
Main PID: 934 (code=exited, status=203/EXEC)
Apr 17 10:32:54 raspberrypi systemd[1]: udp-proxy-2020.service: Service RestartSec=100ms expired, scheduling restart.
Apr 17 10:32:54 raspberrypi systemd[1]: udp-proxy-2020.service: Scheduled restart job, restart counter is at 5.
Apr 17 10:32:54 raspberrypi systemd[1]: Stopped UDP Proxy 20202.
Apr 17 10:32:54 raspberrypi systemd[1]: udp-proxy-2020.service: Start request repeated too quickly.
Apr 17 10:32:54 raspberrypi systemd[1]: udp-proxy-2020.service: Failed with result ‘exit-code’.
Apr 17 10:32:54 raspberrypi systemd[1]: Failed to start UDP Proxy 20202.
pi@raspberrypi:/etc/systemd/system $
any insight would be welcome.
I used the executable available on github (arm32) as I could not figure out how to compile.
Again, on the command line using SSH it works fine. I am using wireguard. without udp proxy, roon starts but the phone does not show up as a player. with UDP proxy it does. this is on an Rpi 2
Any smart people out there have suggestions for getting UDP proxy 2020 working inside Home Assistant? I’m thinking that’s my best shot. Otherwise it would need to run on a Win10 PC. Suggestions? Btw, I have Wireguard running through Home Assistant and can connect to Roon remotely - it just doesn’t see my phone as an endpoint.
You’re right. I’m running it on an Intel nuc - installed as hass.io with supervisor. (forgive me if I have the naming convention wrong - it’s the official image from the ha site for intel nucs).
So I’m no HA expert (never used it to be honest), but looks like it’s just running Linux as the base OS. So you just need to figure out how to ssh in? Sorry, dunno anymore than that. I’d assume someone on the HA forums can help with that. There are Linux/x86 binaries available for udp-proxy-2020 for the NUC.
I am able to start the ./udp-proxy-2020-0.0.4-freebsd-amd64 --port 9003 --interface igb2,wg0 --cachettl 500
and when I access Roon from my phone the binary crashes w/ the following error: FATA[0009] can’t serialize Eth header: {{[] []} ff:ff:ff:ff:ff:ff IPv4 0}
You’re using OpnSense it looks like. Do you know if that uses the user space (go?) Wireshark implementation or the kinda wonky FreeBSD kernel version that was done by the pfSense people and then got pulled at the last minute?
root@OPNsense:/home/guyp # ifconfig wg0
wg0: flags=43<UP,BROADCAST,RUNNING> metric 0 mtu 1420
options=80000
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
groups: tun wireguard
nd6 options=103<PERFORMNUD,ACCEPT_RTADV,NO_DAD>
Opened by PID 98308
Wireguard Info from OPNSENSE:
WireGuard VPN service
WireGuard® is an extremely simple yet fast and modern VPN
that utilizes state-of-the-art cryptography. It aims to be
faster, simpler, leaner, and more useful than IPSec, while
avoiding the massive headache. It intends to be considerably
more performant than OpenVPN. WireGuard is designed as a
general purpose VPN for running on embedded interfaces and
super computers alike, fit for many different circumstances.
Initially released for the Linux kernel, it is now
cross-platform and widely deployable. It is currently under
heavy development, but already it might be regarded as the
most secure, easiest to use, and simplest VPN solution in
the industry.
Add IPv6 gateway support (contributed by Alexander Korinek)
1.3
Client/peer name validation to use HostnameField
1.2
Dashboard widget (contributed by D. Domig)
1.1
Allow adding interface route for PBR
1.0
Support for most features like S2S, Roadwarrior
DNS, MTU, PSK
Allow to disable setting routes for PBR
Maintainer: m.muenz@gmail.com
-------------------------------------------------------------------------------------------------------------------Debug:
What version of udp-proxy-2020 are you running? (udp-proxy-2020 --version) Some of those log messsages aren’t right. Are you running the latest version which has wireguard support (v0.0.6)?
The logs you’ve pased don’t indicate that udp-proxy-2020 is seeing any Roon packets from the phone on the VPN or vice-versa. Ensure that you’ve disabled WiFi on your phone and the phone is connected to the VPN. You may need to kill & restart the Roon app on your phone.
If that still doesn’t work, please capture the network traffic on your wireguard tunnel where udp-proxy-2020 is running:
tcpdump -i wg0 -s0 -w roon.pcap -c 100
That will capture up to 100 packets which should be plenty. But if it doesn’t auto-exit after a minute while Roon is running, you can hit CTRL-C.
At that point, it’s probably best to create a ticket on github and attach the pcap to the ticket.
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007ef1af00004011c965c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002466666539613063632d623539352d346566622d396533312d336636653763653231383763
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007e56ed000040111bd1c0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002466666539613063632d623539352d346566622d396533312d336636653763653231383763
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007e56ed000040116428c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002466666539613063632d623539352d346566622d396533312d336636653763653231383763
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007e69d1000040115144c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002466666539613063632d623539352d346566622d396533312d336636653763653231383763
DEBU[0104]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007e69d10000401108edc0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002466666539613063632d623539352d346566622d396533312d336636653763653231383763
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:131 main.(*Listen).handlePackets() handlePackets(igb2) ticker
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:131 main.(*Listen).handlePackets() handlePackets(wg0) ticker
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:131 main.(*Listen).handlePackets() handlePackets(igb1) ticker
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007e37fd000040113ac1c0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002466666539613063632d623539352d346566622d396533312d336636653763653231383763
DEBU[0105]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007e37fd000040118318c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002466666539613063632d623539352d346566622d396533312d336636653763653231383763
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007ecb2700004011a796c0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007ecb2700004011efedc0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007ef34d000040117f70c0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007ef34d00004011c7c7c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007e586c0000401162a9c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007e586c000040111a52c0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007e6b62000040114fb3c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:128 main.(*Listen).handlePackets() igb2: received packet and fowarding onto other interfaces
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() igb1: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/send.go:32 main.(*SendPktFeed).Send() wg0: sending out because we’re not igb2
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on igb1
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() igb1 => 192.168.1.255: packet len: 140: ffffffffffff4062310ba37208004500007e38220000401182f3c0a83c0ac0a801ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007e6b6200004011075cc0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:153 main.(*Listen).sendPackets() processing packet from igb2 on wg0
DEBU[0106]/home/vagrant/udp-proxy-2020/cmd/listen.go:290 main.(*Listen).sendPacket() wg0 => 10.0.0.255: packet len: 130: 020000004500007e3822000040113a9cc0a83c0a0a0000ffebf0232b006a0000534f4f4402510a736572766963655f6964002435653230343261642d396263352d343530382d626539322d666636386631396264633933045f746964002434306363626465332d356334632d343434362d623938352d613337343762656337363830
Okay, I’ve been enjoying the beautiful Italian Toscana country-side and decided to dig deep into how to cross compile FreeBSD binaries because there are only so many pictures of duomos I can take or wine tastings I can do. I won’t bore you with the story which was mostly comprised of a series of hilarious mistakes on my part, but the good news is I now have semi-official FreeBSD binaries for ARM64, ARMv6 and ARMv7. All you peeps with NetGate SG-1100, SG-2100 and SG-3100 should be covered now.
Anyways, there are no new features or bug fixes, just the binaries so not doing another official release. Until then, feel free to find some binaries available here. Please note that I will remove these binaries once there is another official release.
Man… Aaron, your a boss. Thank you SO much! Works great on pfsense w/ VLANS and over OpenVPN. I am a noob at networking etc. but got this working with ROCK on proxmox… many many thanks.
Question… do I need to run “udp-proxy-2020 --port 9003 --interface eth0,eth0.100,eth1,tun0 --cachettl 300” (modified for my network of course) every time I want to connect a device? Everything works great when I run this command, but, when I reconnect an idle or off device / reconnect VPN, I have to run it again. Thanks again!