1. 为什么要选择NAT主机

众所周知,当我们出国之后,国内的很多网络服务都很难正常使用(比如常用的音乐和视频服务),这时我们便需要一个中国的IP地址来帮助我们在国外继续享受国内的网络服务。但是国内的VPS价格,实在是感人,看了看阿里云的价格之后(如下图),让我一点念想都没有了。不仅带宽小的可怜,而且价格也十分惊人,价格能接受的仅有学生账户,但是1Mbps(折合128kb/s)的带宽可以说是毫无可用性。

直到前段时间七夕情人节的时候在Telegram上看到关于CloudIPLC的促销信息,其中有相当便宜的国内NAT主机售出,而且共享带宽可以达到50Mbps到100Mbps,可以说是十分划算了,但是由于看到的太晚,促销活动已经结束了。但是最近又开启了新的促销活动,2018.8.31前购买即有价格十分优惠的特供机型,我便赶紧入手了一台徐州联通的机器。(即使没有促销,每个月29.9元的价格也不算贵,提供100Mbps的共享带宽,可以说是十分良心了)

国内 NAT 主机商家推荐 CloudIPLC

尽管NAT主机的配置很低,但是我们仅仅用它来连回国内,因此并不需要太过于纠结配置问题。CloudIPLC是一家成立于2016年的国人 VPS 主机商,主要经营美国、香港、俄罗斯、泉州CN2的 VPS,以及国内徐州电信/联通和泉州移动的 NAT 主机,均为 KVM 虚拟架构。该主机商提供的 NAT 主机也是 KVM 虚拟化,因此相比很多为了打压价格使用 OVZ 虚拟化的 NAT 主机,更具有实用性。

官网地址:https://www.cloudiplc.com

关于NAT技术本身的介绍,可阅读Wikipedia中关于NAT的介绍,本文就不再赘述了。而NAT主机本身,就像是合租房一样,可以节约你的成本,其本质是数个人同时使用同一个VPS主机,但是你一样具有root权限,区别仅仅是可用的端口数有限制(CloudIPLC的NAT主机提供5-10个端口,如有额外需求可以加钱购买。)尽管并不适合用来建站,但是用来搭机场还是问题不大的,特别是对于留学生而言就很划算了。

购买之后可以在后台查看相关的root密码,机器配置等相关信息,也可以控制主机本身进行开启、关闭、重启等操作,而且CloudIPLC还十分贴心的提供了系统安装服务,提供了CentOS、Debian和Ubuntu的自动安装服务并可附带BBR加速。而对于主机端口而言,NAT主机需要端口映射(默认会给一个22端口的映射用来SSH),我购买的这个NAT主机因为是打折款所以只能映射5个端口,一般正常购买的机器应该可以映射10个端口,界面如下图所示。

比较遗憾的是,这个公网端口需要自己尝试才能知道什么端口没有被占用,不过一般找个几万的端口都没有问题的。

如何中转流量(使用iptables

以下教程摘自CloudIPLC

同端口号转发示例:
通过ifconfig命令查看本机内网IP,即eth0网卡对应的IPv4,记下
开启系统的IPv4转发功能

# 新手建议使用 nano 编辑器,更符合使用习惯
apt-get install -y nano
# 或
yum install -y nano
# 修改系统设置
# 将 net.ipv4.ip_forward=0
# 改为 net.ipv4.ip_forward=1
nano /etc/sysctl.conf
# 更新系统设置使修改生效
sysctl -p

加入iptables防火墙规则

iptables -t nat -A PREROUTING -p tcp --dport 端口号 -j DNAT --to-destination 目标IP
iptables -t nat -A PREROUTING -p udp --dport 端口号 -j DNAT --to-destination 目标IP
iptables -t nat -A POSTROUTING -p tcp -d 目标IP --dport 端口号 -j SNAT --to-source 本机内网IP
iptables -t nat -A POSTROUTING -p udp -d 目标IP --dport 端口号 -j SNAT --to-source 本机内网IP

保存iptables规则

# CentOS
service iptables save
service iptables restart
# Ubuntu / Debian
iptables-save > /etc/iptables.up.rules
iptables-restore < /etc/iptables.up.rules

有更多需求(例如非同端口号转发、多端口号转发)可以查阅完整教程
以及使用 rinetd 进行端口转发的教程

遇到的问题

安装时遇到一个问题,导致一直报错失败。

大概原因就是因为这个用于chacha20加密的包libsodium的下载出了问题,可能是因为原始脚本中使用的是github上的地址,而这个地址的访问不正常。

解决方法就是用vim打开脚本并将下图中所涉及的语句中的地址修改为在国内网络环境下可以使用的网址

修改完成后就万事大吉了。