这个文章重写了,之前是找的网上的资料,因为一个同事使用的那个方案成功转发,结果我的OS X系统却神奇的一直无法成功,原因是无限syntax error
,搞的彻底无语,找遍了各种资源努力无法解决,却在耐心的翻看github中得到了答案:
老版本的OS X使用的是ipfw设置端口转发,但新的版本特别是在我这个OSX Yosemite (10.10.3)中,已经无法使用ipfw,而是换成了PF。
PF配置端口转发的文章网上也有一大堆,但用下来没能解决问题,反而让我迷惑气愤,下面给出最为正确的配置:
首先在 /etc/pf.anchors/
新建一个 com.pow
文件内容如下:
rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
注意: 在段落末尾一定要加换行,否则会报syntax error
错误。
然后使用 pfctl 命令检测配置文件
sudo pfctl -vnf /etc/pf.anchors/com.pow
添加到主配置文件
pf启动时会自动装载/etc/pf.conf文件,因此将anchor文件链接到/etc/pf.conf,转发规则就会自动建立了。在rdr-anchor "com.apple/*"
下面增加:
rdr-anchor "pow"
在:load anchor "com.apple" from "/etc/pf.anchors/com.apple"
后添加:
load anchor "pow" from "/etc/pf.anchors/com.pow"
最终修改后的pf.conf文件如内容如下:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "pow"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/com.pow"
导入并运行PF命令(关键)
一定要注意导入并允许运行 pf的命令,一个是所有现在网上教程里写的下面这个:
sudo pfctl -f /etc/pf.conf
上面这个在OSX Yosemite (10.10)应该没问题,但在我的OSX Yosemite (10.10.3)里是没有用的,要换成下面这个才能成功:
sudo pfctl -evf /etc/pf.anchors/com.pow
设置pf开机自动打开
sudo pfctl -e
添加的为-e参数,即enable
update 2015.06.02
使用PF转发了端口后,eclipse启动tomcat时卡在 eclipse preparing launch delegate...
然后报错:
Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
可能是你之前设置过pf,这时候把pf停用了就可以了:sudo pfctl -d
,停用再开启即可解决问题!
References:
[1]Port Forwarding in Mavericks
[2]Yosemite Support #452
[3]http://alpha.logdown.com/posts/218221-fix-the-pow-cant-start-in-osx-yosemite-1010
原文连接
的情况下转载,若非则不得使用我方内容。