-1

我一生中从未使用过 FreeBSD,但我必须在 FreeBSD 上部署 HTTP API。API 部署在端口 3002 上。

我需要做什么才能将请求从端口 80 转发到端口 3002?

我尝试将此添加到我的 /etc/natd.conf 文件中:

interface le0
use_sockets yes
dynamic yes

redirect_port tcp 192.168.1.8:80 192.168.1.8:3002

我的 /etc/ipfw.rules 文件中也有这个:

 ipfw add 1000 fwd 127.0.0.1,80 tcp from any to any 3002

当我跑步时,ipfw -q -f flush我得到:

 ipfw: setsockopt(IP_FW_XDEL): Protocol not available

我不知道这意味着什么,但它不起作用。

有人可以告诉我(用简单的新手术语)如何在 FreeBSD 中将请求从 80 转发到 3002 吗?

(我假设端口 80 是开放的,并且是全新 FreeBSD 安装上 HTTP 请求的默认端口)

4

4 回答 4

2

最简单的方法是使用NginxHAproxy侦听port 80然后将您的请求转发/代理到您的 API,通过这样做,您还可以从终止 SSL port 443中受益,只需将流量转发到您的 API

例如安装 nginx:

# pkg install nginx-lite

然后在服务器部分编辑/usr/local/etc/nginx/nginx.conf并使用它:

server {
    listen 80 default_server;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:3002;
        proxy_http_version 1.1; # for keep-alive
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

这会将请求转发到端口 3002 上的 API,而无需使用NAT或任何防火墙(如ipfwor pf),如果您的应用程序在监狱中运行,也可以使用。

于 2018-06-28T19:24:16.440 回答
0

请记住,您需要输入 /etc/rc.conf: gateway_enable="YES"。您可能还需要创建一个管道(检查 ipfw man),并加载一个 dummynet 模块。

于 2018-06-27T17:49:41.083 回答
0

在我看来,更简单的选择是使用 PF。让我引用手册中的一个例子 https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-pf.html

...重定向和NAT规则需要在过滤规则之前定义。在 nat 规则之后立即插入此 rdr 规则:

rdr 将 $int_if proto tcp 从任何端口传递到任何端口 ftp -> 127.0.0.1 端口 8021

FWIW,我已经发布了 Ansible 角色来配置 PF https://galaxy.ansible.com/vbotka/freebsd-pf/

于 2018-06-28T15:37:55.740 回答
0

快完成了!!!!

应该

[是] ipfw 将 1000 fwd 127.0.0.1,80 tcp 从任何到任何 3002

ipfw add 1000 允许通过 eth2 从任何到 127.0.0.1 的 ipv4

ipfw 通过 eth2 将 1010 fwd 127.0.0.1,3002 ipv4 从任何添加到任何 80,443

于 2020-09-07T20:23:44.887 回答