您的位置:首页 > 其它

Mac Yosemite 开机启动设置80端口转发

2015-08-18 14:27 459 查看


Mac Yosemite 开机启动设置80端口转发

最近换了Mac系统,启动jetty时,发现80端口不能用:

2015-01-27 23:06:57.819:WARN::failed SelectChannelConnector@0.0.0.0:80: java.net.SocketException: Permission denied 2015-01-27 23:06:57.820:INFO::Started Ajp13SocketConnector@0.0.0.0:8009
2015-01-27 23:06:57.820:INFO::AJP13 is not a secure protocol. Please protect port 8009 2015-01-27 23:06:57.820:WARN::failed Server@426c87c9: java.net.SocketException: Permission denied java.net.SocketException: Permission denied 

原因是1024以下端口,被Unix系统保留,只能以root权限使用。所以希望能够使用8080来启动jetty,然后访问80端口转向8080,在网上找到的解决方案如下:

方案一:(MacOS Yosemite 下已失效):

mac 端口转发

》查看当前 ipfw 规则:

sudo ipfw show

》port 80 to 8080 forward:

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

》清除 ipfw 规则

sudo ipfw flush

方案二:更新到 10.10 之后之前使用 ipfw 命令被彻底移除了,以下是例外一个方案(虚拟机设置的端口转发案例,并开机自动加载)。

下面的命令都是在 root 用户下执行,推荐执行 sudo -i 之后完成下面的操作

创建文件 /etc/pf.anchors/vbox,添加如下两行,将本地 80,22 端口转发到 8080,8022 端口
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 22 -> 127.0.0.1 port 8022


以上红色部分需要注意,OS X 默认有个本地网络端口名字叫 lo0 如果你想通过局域网甚至外网访问 80, 22 端口则还需要按照这个格式添加接入网络的端口。

BTW: 因为非 root 用户不能使用低端口,例如 22, 80 于是我为了访问虚拟机的 ssh 以及 http 使用 22 和 80 端口,于是将 virtualbox 的端口转发设置为:
宿主机虚拟机
802222
808080
 

再编辑 /etc/pf.conf 文件,在如下位置添加红色两行
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "vbox"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "vbox" from "/etc/pf.anchors/vbox"


现在可以使用命令

pfctl -ef /etc/pf.conf

测试端口转发是否生效

为了实现开机自启动,需要编辑文件 /System/Library/LaunchDaemons/com.apple.pfctl.plist

找到如下位置,添加一行红字所示,之后重启即可自动设置端口转发
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>


ab02
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  server jetty mac pfctl