落絮飞雁的个人网站
解决OpenWRT下ngrok无法启动的问题
解决OpenWRT下ngrok无法启动的问题

ngrok作为一款内网穿透工具,可以很方便的把内网设备映射到公网访问。不少路由器固件上都集成了这个工具。最近在两台路由器上设置ngrok时遇到了不能启动的问题。

设置token为可选参数

为了防止服务被滥用,大多数ngrok服务商的配置中都有token参数,不过我的ngrok服务端是自己搭的,没有设置token。而部分固件中token却是必填参数。因此缺少token会导致启动失败。比如我用的K2P官改固件中就存在这个问题:

解决方法:编辑 /etc/init.d/ngrokc 文件,找到类似下面的判断语句:

if [ -z "$shost" -o -z "$sport" -o -z "$token" ]; then
	return 0
fi

改为:

if [ -z "$shost" -o -z "$sport" ]; then
	return 0
fi

保存,重启ngrok服务即可。

https://www.luoxufeiyan.com/wp-content/uploads/2018/08/K2P-ngrok.png
K2P固件
https://www.luoxufeiyan.com/wp-content/uploads/2018/05/Lenna.jpg

解决“本地IP地址输入错误”的问题

在输入本地IP地址时,我一般用127.0.0.1作为路由器本机的IP,不过保存时却遇到提示:“本地IP地址输入错误”。原来是限制只能输入LAN网段的IP(192.168.0.X),不支持输入其他IP或者localhost等的地址。固件是在前端用JS判断的,简单修改即可。

解决方法:编辑 /usr/lib/lua/luci/view/pc/ngrok.htm 文件,注释下面位置的代码:

	function saveto_ngrok(index){
		var ival=document.getElementById("SubDomain").value.replace(/(^\s*)|(\s*$)/g, "");
		var err;
		if(document.getElementById("Protocol").value=="TCP")
		{
		 err = checkNumNew(document.getElementById("RemotePort").value, 1, 65535);
		
		 if(E_NONE != err){
			showAlert("TCP协议必须填写远程端口,端口有效值为1-65535");
			return;
			
		 }
		}
		else
 		{
		 if(ival=="") {
			showAlert("请输入子域名!HTTP及HTTPS协议必须输入子域名!");
			return;
		 }
		} 

		err = checkNumNew(document.getElementById("LocalPort").value, 1, 65535);
		
		if(E_NONE != err){
			showAlert("本地端口错误,端口有效值为1-65535");
			return;
		}
		//把下面代码注释掉即可
		// err = checkIp(document.getElementById("LocalIP").value);
		// if(E_NONE != err){
		//
		//  showAlert("本地IP地址输入错误");
		//  return;
		//
		// }

		ngrokList[index].subdomain=document.getElementById("SubDomain").value;
		ngrokList[index].ip=document.getElementById("LocalIP").value;
		ngrokList[index].lport=document.getElementById("LocalPort").value;
		ngrokList[index].rport=document.getElementById("RemotePort").value;
		ngrokList[index].protocol=document.getElementById("Protocol").value;
		ngrokList[index].domaintype=domainmode;

		gen_mainTable();

		
		document.getElementById("main_box").style.display = "block";
	}
https://www.luoxufeiyan.com/wp-content/uploads/2018/08/checkIP.png
K2P固件

添加SSL支持

另一台路由器的ngrokc启动时报错:ssl_handshake returned -0x50,因为固件是我很早前编译的(还是Barrier Breaker版本),软件版本也很旧了,索性更新了一下ngrokc传上去,并且在路由器上添加SSL支持。

mkdir -p /etc/ssl/certs
export SSL_CERT_DIR=/etc/ssl/certs
opkg install ca-certificates

重启一下ngrokc服务,问题解决。

参考:

原文标题:解决OpenWRT下ngrok无法启动的问题|落絮飞雁的个人网站
授权协议:创作共用 署名-非商业性使用 2.5 中国大陆
除注明外,本站文章均为原创;转载时请保留上述链接。

发表评论

textsms
account_circle
email

落絮飞雁的个人网站

解决OpenWRT下ngrok无法启动的问题
ngrok作为一款内网穿透工具,可以很方便的把内网设备映射到公网访问。不少路由器固件上都集成了这个工具。最近在两台路由器上设置ngrok时遇到了不能启动的问题。 设置token为可选…
扫描二维码继续阅读
2018-08-23