Jolly

关于服务器端口转发的两种常见方法
很多时候,访问国外服务器时,网络质量是很影响体验的,当我们有一台普通线路的国外服务器,日常使用没有太大要求其实也能...
扫描右侧二维码阅读全文
28
2019/06

关于服务器端口转发的两种常见方法

很多时候,访问国外服务器时,网络质量是很影响体验的,当我们有一台普通线路的国外服务器,日常使用没有太大要求其实也能满足自身需要,但是如果想要让体验更佳,那就可以尝试使用服务器端口转发。

端口转发的原理是用一台国内的服务器来做跳转,利用国内服务器优质的线路,使得访问国外服务器速度更快更稳定。常见的转发有rinetd、Haproxy、iptables、socat,前面2种只能转发TCP,后面TCP/UDP都可以转发,这里介绍iptables、socat,下面来看看两种转发方式。

一、socat转发

一键脚本
脚本说明:脚本默认开启UDP、TCP转发,带开机自启功能,且一次只能转发单个端口,如果想转发多个端口请重复运行本脚本

使用root运行以下命令:

wget https://www.moerats.com/usr/shell/socat.sh && bash socat.sh

按要求输入以下信息:

如果你要用本地服务器的3333端口转发IP为1.1.1.1服务器的6666端口,那就依次填入指定参数。
请输入本地端口:3333
请输入远程端口:6666
请输入远程IP:1.1.1.1
输入后直到配置完成

二、iptables转发

2.1一键脚本

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/skytotwo/master/iptables-pf.sh && chmod +x iptables-pf.sh && bash iptables-pf.sh

下载并运行脚本后,先选择 1. 安装 iptables ,会检测是否安装 iptables 同时也会进行 iptables 防火墙开机启动加载等配置。

使用方法

./iptables-pf.sh

运行脚本后,会显示菜单:

 iptables 端口转发一键管理脚本 [vx.x.x]
 -- Toyo | doub.io/wlzy-20 --
 
 0. 升级脚本
————————————
 1. 安装 iptables
 2. 清空 iptables 端口转发
————————————
 3. 查看 iptables 端口转发
 4. 添加 iptables 端口转发
 5. 删除 iptables 端口转发
————————————
注意:初次使用前请请务必执行 1. 安装 iptables(不仅仅是安装)
 
 请输入数字 [0-5]:

选择 4. 添加 iptables 端口转发 后,会提示你依次输入 欲转发IP、欲转发端口、本地监听端口、本地IP、转发类型:

请输入 iptables 欲转发至的 远程端口 [1-65535] (支持端口段 如 2333-6666, 被转发服务器):10000-11000
 
 欲转发端口 : 10000-11000
 
请输入 iptables 欲转发至的 远程IP(被转发服务器):2.2.2.2
 
 欲转发服务器IP : 2.2.2.2
 
请输入 iptables 本地监听端口 [1-65535] (支持端口段 如 2333-6666)
(默认端口: 10000-11000):
 
 本地监听端口 : 10000-11000
 
请输入 本服务器的 公网IP网卡IP(注意是网卡绑定的IP,而不仅仅是公网IP,回车自动检测):
 
 本服务器IP : 1.1.1.1
 
请输入数字 来选择 iptables 转发类型:
 1. TCP
 2. UDP
 3. TCP+UDP
 
(默认: TCP+UDP):
 
——————————————————————————————
 请检查 iptables 端口转发规则配置是否有误 !
 
 本地监听端口 : 10000-11000
 服务器 IP : 2.2.2.2
 
 欲转发的端口 : 10000-11000
 欲转发 IP : 1.1.1.1
 转发类型 : TCP+UDP
——————————————————————————————

最后会提示你确认配置是否有误,如果没有问题就按任意键继续,启动成功后就会提示:

——————————————————————————————
 iptables 端口转发规则配置完成 !
 
 本地监听端口 : 10000:11000
 服务器 IP : 1.1.1.1
 
 欲转发的端口 : 10000:11000
 欲转发 IP : 2.2.2.2
 转发类型 : TCP+UDP
——————————————————————————————

选择 3. 查看 iptables 端口转发 后,会显示如下:

当前有 2 个 iptables 端口转发规则。
1. 类型: tcp 监听端口: 10000:20000 转发IP和端口: 2.2.2.2:10000-20000
2. 类型: udp 监听端口: 10000:20000 转发IP和端口: 2.2.2.2:10000-20000

选择 5. 删除 iptables 端口转发 后,也会显示列表,然后让你选择 要删除的端口转发规则序号。

Shadowsocks客户端说明
假设你的海外服务器(被中转)中搭建的Shadowsocks服务端的IP是 2.2.2.2 ,SS端口是 10000 。

假设中转服务器的IP是 1.1.1.1 ,本地监听端口和SS端口不一致,本地监听端口是 20000 。

那么,你的Shadowsocks客户端,添加Shadowsocks服务器,IP填写 1.1.1.1 ,端口填写 20000 ,其他的 密码/加密方式/协议/混淆等等 全部和原Shadowsocks账号一样!

其他说明
CentOS 7 默认的防火墙是 firewall,要使用本脚本,请先卸载或关闭 firewall 服务器,并安装 iptables 全套软件。

关于国内腾讯云等服务器转发失败解释
国内的很多服务器,例如腾讯云,在VPS网卡上面绑定的都是内网IP,这样的话,如果你用脚本自动检测外网IP,会转发失败,需要在添加转发规则的时候,本服务器IP手动写你的服务器 网卡上面绑定的IP。

2.2手动添加

在使用iptables转发流量之前请执行如下命令:

sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
sysctl -p

然后我们清除下所有默认的iptables表:

iptables -F
iptables -t nat -F
service iptables save

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 -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]

注意:执行完毕后,必须进行保存 请使用 service iptables save 进行保存。

以下是一个实例(这里我们的应用端口为50020~50029,我们使用520022测试转发另外一个IP的6053端口,我们的主IP为:192.168.5.2,转发服务器IP为:1.1.1.1):

iptables -t nat -A PREROUTING -p tcp --dport 50022 -j DNAT --to-destination 1.1.1.1:6053
iptables -t nat -A PREROUTING -p udp --dport 50022 -j DNAT --to-destination 1.1.1.1:6053
iptables -t nat -A POSTROUTING -p tcp -d 1.1.1.1 --dport 6053 -j SNAT --to-source 192.168.5.2
iptables -t nat -A POSTROUTING -p udp -d 1.1.1.1 --dport 6053 -j SNAT --to-source 192.168.5.2
service iptables save

三、iptables和socat的优劣

实际体验中iptables会好一点,socat当转发数多了就会炸,推荐使用iptables转发。

Last modification:November 26th, 2019 at 11:02 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment

🌓