You can use xinetd for that.
In this example I'll show how to redirect incoming connections to IPv6 address 2001:db8::1 port 1234 to IPv4 address 192.0.2.1 port 1234. I'll call the configuration/service 'demo':
Put the following configuration in a configuration file called /etc/xinetd.d/demo:
service demo
{
type = UNLISTED
port = 1234
bind = 2001:db8::1
socket_type = stream
wait = no
user = nobody
redirect = 192.0.2.1 1234
}
It also lets you control who can access the service in both the service definition and the /etc/hosts.allow and /etc/hosts.deny files.
service demo
{
...
only_from = 2001:db8::/32
no_access = 2001:db8:ffff::/48
...
}
Other potentially useful option:
service demo
{
...
access_times = 09:45-16:15
log_on_success = HOST DURATION
log_on_failure = HOST ATTEMPT
...
}