19.05.2018 4:29, Andrea Venturoli wrote:

> Let's say I have a router connected to the Internet on one side and to a LAN 
> with private IPs on the other.
> I want some clients from outside to be able to connect to a TCP service on a 
> machine on the LAN: they should connect to port X on the firewall's public IP 
> and reach port Y on the internal box.
> 
> I've used net/socket in the past, but stopped when, in some corner case, it 
> would "ruin" the data; besides it has been removed from the port tree.
> 
> I happily switched to net/tcpproxy, but lately it's dying every few days and 
> must be restarted; I could drop its rc.d script and use sysutils/daemontools' 
> svscan instead, but if there's a simpler solution...
> 
> Does anyone have a good suggestion for a program similar to the above ones?
> I require nothing fancy, I just want it to be reliable.

You don't need any additional software at all.
Just instruct FreeBSD kernel to do what you need, it will do that just fine.

In /etc/rc.conf:

gateway_enable="YES"
firewall_enable="YES"
firewall_type="open"
firewall_nat_enable="YES"
firewall_nat_interface="em0" # your external interface with public IP
firewall_nat_flags="same_ports"
firewall_coscripts="/etc/rc.firewall.local"

And create executable script /etc/rc.firewall.local to configure port 
redirections:

#!/bin/sh

. /etc/rc.conf
fwcmd="/sbin/ipfw -q"
# redirect connections to external port 8000 to specified internal host and 
port 80
# redirect connections to external port 8443 to specified internal host and 
port 443
redirects="\
        redirect_port tcp 192.168.0.100:80 8000  \
        redirect_port tcp 192.168.0.200:443 8443 \
"

${fwcmd} nat 123 config if $firewall_nat_interface $firewall_nat_flags 
$redirects
# EOF

That's all. You can apply these changes without reboot using command like
service ipfw start >& /tmp/ipfw.log     # for tcsh or
service ipfw start > /tmp/ipfw.log 2>&1 # for sh/bash/zsh

No extra daemons needed. Additional advantage of this approach is that
internal hosts will see real public IP address of connecting external host
instead of your own.

_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to