With socat, this serves my purposes:
machine_b$ socat TCP-LISTEN:8089,su=nobody,fork,reuseaddr TCP-CONNECT:127.0.0.1:8088
This tells socat to listen on TCP port 8889 and connect it to local 8088. It runs as the nobody
user, for better security. The fork option means that it will renegotiate the incoming port, so that it doesn't block.
cURLing from my machine:
my_machine$ curl machine_b:8089 "hello from machine_a"