Freebsd

FreeBSD natd 埠轉發

  • October 7, 2019

我正在嘗試在我的 FreeBSD 路由器上設置簡單的natd埠轉發,以便我可以通過 RDP 從外部網路訪問本地 Win 機器(192.168.20.10)。

配置如下:帶有 2 個網卡igb0igb1的 FreeBSD 12.0 機器。igb0上的 PPPoE 網際網路連接。ISP 通過 DHCP 給我固定的公共 IP,調出tun0介面,如下所示:

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1492
  options=80000<LINKSTATE>
  inet 91.122.x.x --> 91.122.y.y netmask 0xffffffff
  groups: tun
  nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
  Opened by PID 1149

91.122.x.x我的固定公共 IP 地址在哪裡)

igb1上的 LAN ,網際網路訪問在本地機器上工作。

使用以下選項重建核心:

#IPFW
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=30
options         LIBALIAS
options         IPFIREWALL_DEFAULT_TO_ACCEPT   # optional, won't let you lock out
options         IPDIVERT

#PPPoE
options         NETGRAPH
option          NETGRAPH_PPPOE
options         NETGRAPH_SOCKET

配置如下:

root@beastiebox:/etc # cat rc.conf
hostname="beastiebox"
gateway_enable="YES"
ifconfig_igb0="DHCP"
ifconfig_igb1="inet 192.168.20.1 netmask 255.255.255.0"
mpd_flags="-b"
mpd_enable="YES"
sshd_enable="YES"
#NAT
natd_enable="YES"
natd_interface="igb0"
natd_flags="-f /etc/natd.conf"
#DHCP
dhcpd_enable="YES"
dhcpd_flag="-q"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="igb1"
dhcpd_withumask="022"
dhcpd_chuser_enable="YES"
dhcpd_withuser="dhcpd"
dhcpd_withgroup="dhcpd"
dhcpd_chroot_enable="YES"
dhcpd_devfs_enable="YES"
dhcpd_rootdir="/var/db/dhcpd"
#Firewall
firewall_enable="YES"
firewall_type="simple"
firewall_script="/etc/ipfw.rules"
firewall_logging="YES"
firewall_script="YES"
root@beastiebox:/etc # cat natd.conf
same_ports yes
use_sockets yes
#unregistered_only yes
redirect_port tcp 192.168.20.10:3389 3389
redirect_port udp 192.168.20.10:3389 3389

到目前為止,防火牆是透明的:

root@beastiebox:/etc # ipfw list
65535 allow ip from any to any
root@beastiebox:/etc #

我已經嘗試了很多選項,但仍然無法從外部 RDP 到本地 Win 機器。(如果我將我的 FreeBSD 路由器換成我以前用過的另一個路由器,它就可以工作)。我只是不明白redirect_port當 ipfw 配置為allow ip from any to any.

請幫我指出我的配置中的錯誤。

請不要建議埠轉發配置的不同方式(pf 等),我特意詢問natd/ipfw

我終於弄清楚了這個問題。

我試圖殺死natd只是為了用一些測試選項重新啟動它,我完全被 LAN 機器在那之後並沒有失去他們的網際網路連接的事實驚呆了。我開始調查並發現我有另一個單獨的 NAT 工作!那是ppp nat/etc/ppp/ppp.conf. 所以,這是根本原因。但是,我不得不更改我的一些natd/ipfw設置,以使一切按預期工作。

首先,我改為natd_interface="igb0"natd_interface="tun0"從我的外部 NIC 到介面 pppoe 在連接時啟動)。我添加了 ipfwdivert規則,如下所示:

ipfw add divert natd from any to any via tun0

之後一切正常,我現在正在繼續我的防火牆調整。

引用自:https://unix.stackexchange.com/questions/545096