阿里云ECS内网服务器通过同区域另一台外网服务器共享上网并对外发布(通过nginx)
手里现有一台公网win03服务器,想再来一台linux服务器,由于都是玩的,而且通过nginx可以将内网的发布出去linux服务器就没买带宽。原以为内网服务器外网可入不可出,没想到出入都不行,linux很多软件的安装直接用命令很方便,现在难道要先再win服务器上下载好再上传上去,悲剧了。还是先试试,在win服务器上开启了nat(路由和远程服务),理论上内网其他机器可以设置网管为win服务器的内网IP然后就可以共享上网了,结果在linux里设置网关失败,可能是两台服务器的内网IP不在同一网段上(两个IP都是10开头,但后面三段不同。以前用过IP前两段相同的可以设置),对linux还不是很熟,就没再多试。
还好win服务器上装着nginx,用nginx设置好正向代理,再修改下linux的代理配置,直接可以在linux服务器上使用 apt-get、npm等命令安装网络内容了。
1、win服务器nginx正向代理配置,再http{}中增加:
server{ resolver 10.161.209.111; #win服务器内网IP
listen 809; #代理上网的端口 location / {
}
}
2、linux服务器代理上网配置
vi ~/.bashrc在.bashrc文件末尾添加如下内容export http_proxy
3、在win服务器nginx加入反向代理,指向内网linux服务器,将内网内容发布出去。
server { listen 80;
server_name *.域名.com 域名.com;
location / {
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
}
现在好了,在linux服务器上安装网络上的软件了,网站通过域名也可以直接访问了。不过ssh管理和上传文件还要通过外网win服务器也挺麻烦的。linux版的nginx可以安装tcp代理模块,然后代理linux服务器的ssh和ftp(ssh和ftp都使用的tcp协议)端口就可以了,但是win版的nginx没找到tcp模块(不太熟也没做过多研究)。只好利用win服务器上装的nodejs写一个tcp代理模块。将win服务器上22端口指向linux服务器22端口。
nodejs代码:
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.js运行:node forward.js 22 10.171.223.111:22
第一个22是win服务器的端口,后面ip:port指向到linux服务器好了,先可以通过ssh win服务器外网IP,直接连接到linux服务器了,也可以通过FileZilla的sftp通过ssh端口管理linux服务器文件了。
简单记录一下。帖子内容不能有网址,部分内容只好改图片了。