公司一php系统开发过程中需要连接一个阿里云内网数据库服务器,使用了一个pptp vpn拨号到阿里云
由于我使用的是mac系统,对mac系统下pptp实现原理不太了解,我的php开发环境用的又是docker
所以导致我的mac系统是可以连接vpn服务器的,但是在docker里面是不能访问vpn网络的!
或许可以在docker环境里安装pptp客户端,但是在mac下的docker似乎也存在总总限制,
最终决定采用mac系统端口转发的方式,转发数据库链接端口,
找来找去没有找到一个在mac下比较好用的端口转发软件,遂找了一段使用nodejs实现端口转发的代码,成功实现mysql端口转发!
forwarder.js:
var net = require('net');
var addrRegex = /^(([a-zA-Z\-\.0-9]+):)?(\d+)$/;
var addr = {
from: addrRegex.exec(process.argv[2]),
to: addrRegex.exec(process.argv[3])
};
if (!addr.from || !addr.to) {
console.log('Usage: <from> <to>');
return;
}
net.createServer(function(from) {
var to = net.createConnection({
host: addr.to[2],
port: addr.to[3]
});
from.pipe(to);
to.pipe(from);
}).listen(addr.from[3], addr.from[2]);
forward.sh
node forwarder.js 3306 172.17.151.91:3306
执行forward.sh就可以把本机的3306端口转发到172.17.151.91的3306端口,原理很简单,利用nodejs的pipe功能!