I have a Linux VPS (virtuozzo) server and I need to setup port forwarding, but my hosting provider does not allow iptables-nat kernel modules so iptables -t nat - is not working.

I'm looking for other ways how to do it. I know I can forward port using openssh, but I need to forward 20+ different ports, tcp and udp so this is not an option.

Is there is any software for linux that can do port forwarding?

  • huh good question +1. i am not aware of a solution, looking forward to see whether tehre is something here. Mar 26, 2011 at 13:14
  • And then, what about a program that lets you forward ports to different destinations based on the source IP? May 10, 2011 at 16:16
  • Avoid the problem entirely by never using Virtuozzo/OpenVZ based VPSes. Feb 9, 2013 at 19:41
  • @MichaelHampton: Not extremely constructive... Sep 11, 2014 at 8:26

8 Answers 8


Use the tool called "socat", it is great tool for such things and it is already packaged in many linux distribution. Read about it here : http://www.dest-unreach.org/socat/doc/README

Port forwarding example with socat :

socat TCP4-LISTEN:80,fork TCP4:www.yourdomain.org:8080

This redirect all TCP connections on port 80 to www.yourdomain.org port 8080 TCP.

  • Don't forget https is default on port 443, instead of port 80 :)
    – keiki
    Sep 30, 2013 at 10:20
  • Socat is the only tool that worked for me on a ipv6-only raspberry pi
    – chotchki
    Nov 7, 2013 at 3:09
  • Perfect, solved my problem instantly. Note, you need to make sure that the incoming port is open in iptables if you have such.
    – jancha
    Mar 23, 2015 at 17:18

There's a tiny, light resources program called redir which is pretty configurable.

apt-get install redir to install on Debian-based distributions.

redir :SRC :DEST will run in the background as a daemon.

  • I've used this tool in the past and it works very well...
    – Alex
    Sep 2, 2016 at 16:06
  • I second this tool. It seems that this is not a package forwarding tool, but the tcp tunnel. It will change the source IP address seen by target. So it works great when you need to redirect one port to another computer which has a different routing setup.
    – scegg
    Oct 29, 2018 at 5:10
  • wow, this is awesome, just the trick.
    – Eddie
    Apr 9, 2021 at 1:09

What about rinetd ?
Its a daemon that redirects TCP connections. Have a look at the man page to see if it suits your needs: https://manpages.debian.org/unstable/rinetd/rinetd.8.en.html


xinetd supports a redirect attribute which will do what you want. As others have noted there are a number of programs which handle redirects.

Using xinetd or other program which uses the tcpwrappers library will allow you to apply access restrictions if and when it becomes necessary.


xinet/inetd. For e. g.:


Allows a tcp service to be redirected to another host. When xinetd receives a tcp connection on this port it spawns a process that establishes a connection to the host and port number specified, and forwards all data between the two hosts.


  • Looks interesting, but it is limited to TCP only as you said
    – Doud
    Sep 7, 2012 at 16:16

I found small util called portfwd http://portfwd.sourceforge.net/ it does exactly what I need (TCP and UDP forwarding), homepage says it was last updated in 2002, but latest release is 2007, and it works on 2.6 kernel.

  • I'll accept my answer as it seams this is the only software which fully supports both TCP and UDP protocols.
    – troex
    Apr 3, 2011 at 14:41

SSH Does port forwarding, so long as you can tunnel in an SSL connection.


Ok here is the simple answer that should work, it's not rocket science but most people over complicate the answer and confuse all the new to Linux users.

ufw allow 2xxx

2xxx = what ever your port number is just type that command into your server terminal and your desired port is opened up.

  • It just opens the port on interfaces facing outside the server. It does not redirect or forward the port from one ip to the other. IT OPENS THE PORT. Jul 5, 2018 at 6:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .