AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 102416
Accepted
nafe
nafe
Asked: 2010-01-14 12:46:45 +0800 CST2010-01-14 12:46:45 +0800 CST 2010-01-14 12:46:45 +0800 CST

mac os x 的 iptables 等价物

  • 772

我想将请求转发192.168.99.100:80到127.0.0.1:8000。这就是我在linux中使用的方法iptables:

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000

我如何在 MacOS X 中做同样的事情?我尝试了一些ipfw命令组合,但没有取得多大成功:

ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(对我来说,成功是将浏览器指向http://192.168.99.100并从我运行的开发服务器上获得响应localhost:8000)

mac-osx iptables ipfw
  • 7 7 个回答
  • 194585 Views

7 个回答

  • Voted
  1. Best Answer
    nafe
    2010-01-24T16:34:26+08:002010-01-24T16:34:26+08:00

    所以我找到了一种方法来做到这一点。我不确定这是否是首选方式,但它有效!在你最喜欢的外壳上:

    sudo ifconfig lo0 10.0.0.1 alias
    sudo ipfw add fwd 127.0.0.1,9090 tcp from me to 10.0.0.1 dst-port 80
    

    (别名 tolo0似乎是缺失的部分)

    如果您希望(假)域指向这个新别名,请确保 /etc/hosts 包含以下行:

    10.0.0.1 www.your-domain.com
    
    • 43
  2. Kevin Leary
    2015-03-07T09:24:29+08:002015-03-07T09:24:29+08:00

    我能够使用Mac 10.10.2 上的ifconfigand命令来完成这项工作。pfctl通过以下方法,我成功地映射127.0.0.1:3000到mydomain.com我的机器上的本地。

    在命令行中输入以下两个命令以将连接转发127.0.0.1:3000到10.0.0.1:

    sudo ifconfig lo0 10.0.0.1 alias
    echo "rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port 80 -> 127.0.0.1 port 3000" | sudo pfctl -ef -
    

    然后编辑您的/etc/hostsor/private/etc/hosts文件并添加以下行以将您的域映射到10.0.0.1.

    10.0.0.1 mydomain.com
    

    保存主机文件后,刷新本地 DNS:

    sudo discoveryutil udnsflushcaches
    

    现在mydomain.com在浏览器中打开,您将看到托管在您的本地主机端口(即127.0.0.1:3000)上的服务器。基本上,此过程将一个映射<ip>:<port>到一个新的<ip>,以便您可以映射该 IP 的主机。

    • 37
  3. dakini
    2016-07-03T09:03:50+08:002016-07-03T09:03:50+08:00

    我最近也不得不做类似的事情,并且在搜索中找到了这个答案。不幸的是,Nafe 使用的答案ipfw现在在 OSX 中已被弃用且不可用;Kevin Leary 的回答确实有点骇人听闻。所以我不得不做一些更好(更干净)的东西,并决定在这里分享给后代。该答案主要基于此要点中提到的方法。

    正如 OP 所提到的,将浏览器指向 192.168.99.100 应该会从 localhost:8000 的服务器获得响应。添加别名ifconfig并不是真正必要的,pfctl单独使用就足够了:要实现这一点,需要修改pf.conf文件。/etc/pf.conf

    首先,我们(使用 sudo)在以下位置创建一个新的锚文件(我们称之为 redirection):/etc/pf.anchors/redirection. 这基本上是一个常规文本文件,包含以下行(就像 Kevin Leary 的回答一样)rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000:. 创建新的锚文件后,需要在pf.conf文件中引用它。pf.conf使用 sudo打开文件并rdr-anchor "redirection"在最后一个 rdr-anchor 行(即rdr-anchor "com.apple/*")之后添加load anchor "redirection" from "/etc/pf.anchors/redirection"并在末尾添加。

    最终,这就是 pf.conf 文件的样子:

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "redirection"  #added for redirection/port forwarding
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "pow" from "/etc/pf.anchors/redirection"  #added for redirection/port forwarding
    

    差不多就是这样。只需pfctl通过sudo pfctl -d先禁用它然后sudo pfctl -fe /etc/pf.conf再次启动它来重新启动。

    现在,如果您需要在每次重新启动后自动执行此操作,则需要完成另一项工作:pfctl需要更新启动守护进程(引用的 gist 提到 pf 在启动时自动启用,但这似乎不是查看代码的案例)。打开(使用 sudo)System/Library/LaunchDaemons/com.apple.pfctl.plist并查找以下内容:

    <array>
              <string>pfctl</string>
              <string>-f</string>
              <string>/etc/pf.conf</string>
    </array>
    

    并添加该行<string>-e</string>以最终使其成为这样:

    <array>
             <string>pfctl</string>
             <string>-e</string>
             <string>-f</string>
             <string>/etc/pf.conf</string>
    </array>
    

    那应该这样做。

    警告:Apple 不再允许像那样更改启动恶魔文件(不允许使用 sudo、chmod 或其他任何东西)。唯一的方法是修改系统完整性保护设置:启动到恢复模式并启动终端。用 来检查 SIP 状态csrutil status,一般应该是启用的。禁用它csrutil disable并在正常模式下重新启动,然后如上所述对 plist 文件进行更改。完成后,返回恢复模式并通过发出csrutil enable.

    说明:可以通过发出已经是 localhost lo0 的(默认)别名的ifconfig命令来检查127.0.0.1- 这一事实被用来避免必须为 localhost 添加额外的别名并简单地使用pf.conf文件中的默认地址。

    更新:不幸的是,似乎在启动时加载文件不起作用。我仍在努力寻求帮助以对其进行排序。在那之前,sudo pfctl -f /etc/pf.conf在启动后运行就可以了。

    • 7
  4. Colin Sullivan
    2013-08-06T09:50:25+08:002013-08-06T09:50:25+08:00

    这对我来说效果很好:

    • 通过系统偏好设置启用防火墙
    • 如下所述创建 ipfw 启动文件:https ://serverfault.com/a/235124/94860
    • 将以下行添加到启动文件中,如下所述:http: //xeiam.com/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/

      add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in

    • 4
  5. PEra
    2010-01-14T13:10:25+08:002010-01-14T13:10:25+08:00

    从 10.5 开始,OS X 带有一个新的、面向应用程序的防火墙,而不是ipfw. 但是 ipfw 仍然安装。如果您对其语法有疑问,请查看图形前端,例如WaterRoof或Flying Buttress。

    HTH,佩拉

    • 1
  6. monomyth
    2010-01-14T14:06:16+08:002010-01-14T14:06:16+08:00

    规则的顺序很重要,请确保在您的允许规则之前没有“全部拒绝”,或者类似的东西。

    • 1
  7. Gordon Davisson
    2010-01-14T23:45:19+08:002010-01-14T23:45:19+08:00

    您的命令似乎缺少规则编号;尝试:

    ipfw add 100 fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80
    

    (如果您不是以 root 身份运行,则必须在它前面加上 sudo)。要检查的另一件事是启用了防火墙:

    sysctl net.inet.ip.fw.enable
    

    如果它返回值为 0(关闭),请使用以下命令打开它:

    sysctl -w sysctl net.inet.ip.fw.enable=1
    

    ...然后安排它在计算机重新启动时重新启用。执行此操作的“正确”方法可能是创建一个启动项(Lingon使这相当容易)。或者只使用 PEra 提到的 GUI 工具之一,让它处理细节。

    • 1

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • 登录网络用户帐户 (Open Directory) 时,Adobe Reader 不会启动

  • 如何在客户端计算机上阻止 Finder 的“记住此密码”?

  • 如何在 Mac OS X 中正确安装 Subversion?

  • 随行人员通过 VPN 连接到 Exchange 2007

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve