之前有一篇文章用iptables做端口映射,实现了从外网直接ssh连接一台内网云主机,但即便这样,还是存在一些问题,譬如,apt仍旧无法访问外部源。

至于原因哈,猜一个,因为前面配置端口转发的时候只映射了22端口,而更新软件源等,使用的是http的80端口,些许应该再配置下http的80端口、https的433端口……

一不做二不休,直接在外网主机上用squid架设代理服务器,不就免去这一切乱七八糟的事了吗?架设代理服务器的过程后面会补上(又给自己挖坑呢)

配置好代理服务器后,自然要把内网主机的代理配置指向这台外网主机。谷歌了一下,大部分文章提到的3种办法。一是直接执行

1
export http_proxy=“proxy_username:password@ip:port”

(这只针对当前会话有效);二是把上述内容添加到~/.bashrc中(实现当前用户每次登录时生效);三是安装一些第三方工具,类似于proxychain之类的。

但做了配置之后(不过我只试验了前2种),的确可以使用curl、wget等访问http资源了,但apt还是无法访问外部源,而且配置生效的范围相对局限。这又如何解决呢?

突然想到安装了gui的ubuntu,可以在系统设置中配置全局代理,遂找了个有gui的虚机试验了一把,果然发现配置生效后有两个文件发生了变化,打开具体看一眼,内容是这样滴

1
2
3
4
5
6
# /etc/environment
http_proxy="http://192.168.128.129:3128/"
https_proxy="https://192.168.128.129:3128/"
ftp_proxy="ftp://192.168.128.129:3128/"
socks_proxy="socks://192.168.128.129:3128/"

1
2
3
4
5
6
# /etc/apt/apt.conf
Acquire::http::proxy "http://192.168.128.129:3128/";
Acquire::https::proxy "https://192.168.128.129:3128/";
Acquire::ftp::proxy "ftp://192.168.128.129:3128/";
Acquire::socks::proxy "socks://192.168.128.129:3128/";

这么看来,前者配置的是系统全局代理服务器,后者则是针对apt做了单独的配置,这篇文章也应征了这个说法(ubuntu 10.10以后apt代理从后一个文件中读取)。

好了,将这两个文件新增的内容拷贝出来,贴到需要配置全局代理的内网主机的相同文件中去吧!

2017-01-14补充

除了apt,发现mvn也不走系统全局代理(捂脸)……

maven的代理配置位于setting.xml文件中的节,看着修改下host和port就可以了,说起来也蛮简单的。