Gmail在中国大陆不能正常使用是公开的秘密。印象中是2015年的时候,Gmail的域名(pop.gmail.comsmtp.gmail.com)正式无法解析,但当时通过IP访问还是可行的,过去的两年里我一直用这种方式结合Emacs的Mew来使用Gmail。时间到了2017年,用IP访问的方式也受到严重的干扰,现在我用的IP已经几乎无法使用了。无奈之下,只能研究对策。可行的方案有三种:

  1. 使用某些第三方的服务代收;
  2. 本地代理到Gmail服务器的连接;
  3. 用端口转发在服务器

第三方服务是不可能用第三方服务的,这辈子都不会用第三方服务,本地代理到Gmail的连接的话,又不会做,因为是加密连接,代理起来麻烦。我有一个VPS,正常使用Gmail只需要两个端口(加密的POP3端口995和加密的SMTP端口465),何不用端口转发呢?

稍微搜索了一下,参考这个教程,搞成了:

1
2
3
4
5
6
7
# 这条命令把到VPS端口9995的访问转发到64.233.176.108:995。
iptables -t nat -A PREROUTING -p tcp --dport 9995 -j DNAT --to-destination 64.233.176.108:995
# 64.233.176.108:995会跟VPS通信,这条命令把这些收到的包以VPS的IP发出去。
iptables -t nat -A POSTROUTING -p tcp -d 64.233.176.108 --dport 995 -j SNAT --to-source 104.224.170.13

iptables -t nat -A PREROUTING -p tcp --dport 9465 -j DNAT --to-destination 64.233.176.108:465
iptables -t nat -A POSTROUTING -p tcp -d 64.233.176.108 --dport 465 -j SNAT --to-source 104.224.170.13

其中,第一条和第三条命令里的99959465可以改成你想要的,第二条和第四条命令最后的104.224.170.13需要改成你的VPS的公网IP。

另外,我发现网上的很多教程有错误,因为一些博客系统会自作聪明的把--转换为,导致一些命令,比如--list,变成了–list,如果照抄肯定会出错,而且这种错误还不大好看出来,因为它们实在太像了。要避免这类错误,一种方式是把命令引用,再就是控制博客系统不让它自动转换。总体来看,还是把命令都引用的好,而且在markdown的语法里面引用非常容易实现。

2017-03-07 Update: 学艺不精啊,其实可以用Shadowsocks的“ss-tunnel”,代码类似

1
ss-tunnel.exe -c /etc/shadowsocks/config.json -l "995" -L "64.233.176.108:995" -u & ss-tunnel.exe -c /etc/shadowsocks/config.json -l "465" -L "64.233.176.108:465" -u &

用的是Shadowsocks的协议,安全。

加上Shadowsocks就是两种实现方法了,对于用户来说这两种方法都不需要额外的配置,只需要填上IP和端口就可以了,如果是自用,这两种方案都可以接受。