背景说明
国外的一些vps,线路一到高峰期就炸,或者说一些运营商的线路好,而切换到另外一个运营商,线路就没法看了。这就会导致各种丢包啊,速度难以忍受啊。
遇到这种情况,要么加钱上三网直连或者买针对自己线路优化的服务器,要么就看看通过国内或者香港、新加坡等对国内国外都比较稳定的VPS来进行中转。
以我当前认为表现比较优异的阿里云国际版 ECS新加坡为例,目前从移动、电信过去的线路比较稳定,基本可以应付中转。
说到中转就涉及到中转的方式选择,大致以下:
- rinetd
- haproxy
- iptables
更多的就不说明了。
rinetd
和haproxy
都是已经成型的工具,基本可以自行搜索相关使用以及配置方式。这里主要说明通过iptables规则的方式,而这种方式又涉及到直接使用iptables命令以及使用集成工具firewall
(centos)以及ufw
(debian/ubuntu)。
iptables规则转发图
开启ipv4转发
echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
在配置规则之后可以查询是否设置到了iptables
iptables -t nat -L -v
Centos Firewall端口转发配置
首先检查防火墙伪装功能(SNAT)
# 检查是否允许伪装IP
firewall-cmd --query-masquerade
# 允许防火墙伪装IP
firewall-cmd --add-masquerade --permanent
# 禁止防火墙伪装IP
firewall-cmd --remove-masquerade --permanent
如果查询出来为no,则需要通过add添加。
设置端口转发
# 将80端口的流量转发至8080
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
# 将80端口的流量转发至192.168.0.1
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.0.1 --permanent
# 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent
#查询所有配置
firewall-cmd --list-all
Debian/Ubuntu Ufw端口转发配置
-
设置默认转发策略
将默认转发策略从DROP修改为ACCEPT。vi /etc/default/ufw DEFAULT_FORWARD_POLICY="ACCEPT"
-
配置转发规则
将发往本地端口的数据转发到目的端口
vi /etc/ufw/before.rules
# 注意,需要将下列配置加在(*filter)过滤规则之前。
# ---------------------------------
# Forwarding
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport <src port> -j DNAT --to-destination <dst ip>:<dst port>
-A PREROUTING -p udp --dport <src port> -j DNAT --to-destination <dst ip>:<dst port>
-A POSTROUTING -p tcp -d <dst ip> --dport <dst port> -j SNAT --to-source <src ip>
-A POSTROUTING -p udp -d <dst ip> --dport <dst port> -j SNAT --to-source <src ip>
COMMIT
<src ip>
:转发服务器ip地址
<src port>
:发往转发服务器的本地端口
<dst ip>
:目的服务器ip地址
<dst port>
:目的服务器端口
这里的src ip
,需要注意的是,如果是在类似阿里云、腾讯云这种存在NAT的服务器厂商,则需要确认是否为内网ip还是外网ip。可以自己尝试,内网不行就换成外网。
例如,阿里云:
- 阿里云 ECS:经典网络: 使用公网ip
- 阿里云 ECS:专用网络: 使用内网ip