• Linux
  • 使用iptables几行命令实现流量转发

相信有很多人在用流量转发,比如哪个25元100G的IEPL转发,那么怎么自己实现这种转发呢?用一台服务器转发到另一台服务器。
其实很简单,几行命令搞定,这次俺们用iptables来演示一下。

客户端 --> GFW --> A服务器 --> B服务器(落地) --> YouTube --> 返回客户端

A服务器

以下都在A服务器上操作,也就是转发服务器,白话就是线路好的服务器

首先在服务器上开启tcp转发:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

使其生效:
sysctl -p

好像Debian11以上就弃用了iptables,来安装一下:
apt install iptables -y

假设要把本机A服务器 10010 端口流量转发到B服务器IP 1.2.3.4 的 10086 端口上

在PREROUTING上修改目的地址:

iptables -t nat -A PREROUTING -p tcp --dport 10010 -j DNAT --to-destination 1.2.3.4:10086

在POSTROUTING上修改源地址,以下两条命令二选一:

# 6.7.8.9 是A服务器IP,也就是转发服务器IP
iptables -t nat -A POSTROUTING -d 1.2.3.4 -p tcp --dport 10086 -j SNAT --to 6.7.8.9

# 或者直接用MASQUERADE自动获取源IP,两条命令二选一
iptables -t nat -A POSTROUTING -d 1.2.3.4 -p tcp --dport 10086 -j MASQUERADE

其实上面两条命令就可以用了,为了防止在FORWARD上面被丢弃,添加两条规则允许通过:

iptables -I FORWARD -d 1.2.3.4 -p tcp --dport 10086 -j ACCEPT

iptables -I FORWARD -s 1.2.3.4 -p tcp --sport 10086 -j ACCEPT

补 UDP转发

命令和上面tcp转发稍有不同:

iptables -t nat -A PREROUTING -p udp --dport 10010 -j DNAT --to-destination 1.2.3.4:10086

iptables -t nat -A POSTROUTING -s 1.2.3.4 -p udp --dport 10086 -j MASQUERADE

最后,为了使规则永久生效,不至于重启服务器后丢失,安装个iptables-persistent

apt install iptables-persistent

安装完成后写入规则,这样就不会丢了:
iptables-save > /etc/iptables/rules.v4

上面就是转发服务器上的操作,下面落地服务器就简单了。用法就同大多卖流量转发的一样了。

B服务器

B服务器也就是落地服务器,在B服务器上安装个Shadowsocks就好了,注意端口使用上面转发的10086端口。

安装SS可使用姥爷的一键脚本:
https://github.com/yeahwu/v2ray-wss

客户端

本来B服务器上安装的SS的IP和端口是,IP 1.2.3.4,端口 10086

既然使用了转发,那么客户端只要把IP和端口换成A服务器IP,和转发端口10010,就可以使用了。

后记,删除

删除A服务器上的转发规则,首先查看iptables上nat转发规则:

iptables -t nat -L -n --line-number

记住前面列表编号1或者2,然后删除规则:

iptables -t nat -D POSTROUTING 1

iptables -t nat -D PREROUTING 1

最后删除规则存储文件:

> /etc/iptables/rules.v4

    3 个月 后
    19 天 后
    1 个月 后

    姥爷姥爷.昨晚按照你的教程搞了几次都没成功.

    后来发现是iptables没有启动…. = . =

    再后来发现是debian10 貌似已经淘汰iptables了.换成 nftables了… =. =

      七舅姥爷 姥爷姥爷 我真的安装了的.!

      `root@www:~# iptables -L
      Chain INPUT (policy ACCEPT)
      target prot opt source destination

      Chain FORWARD (policy ACCEPT)
      target prot opt source destination
      ACCEPT tcp – 103...* anywhere tcp spt:226*
      ACCEPT tcp – anywhere 103...* tcp dpt:226*

      Chain OUTPUT (policy ACCEPT)
      target prot opt source destination`

      你看我都打印出来了(为了安全.把IP 端口 隐去了.)

      然后我 systemctl restart iptables

      他却提示 Failed to restart iptables.service: Unit iptables.service not found.

      然后我再 apt install iptables.service

      他却提示
      E: Unable to locate package iptables.service
      E: Couldn’t find any package by glob ‘iptables.service’
      E: Couldn’t find any package by regex ‘iptables.service’

      很奇怪 还有我的中转机是NATVPS

      姥爷.我还有一个问题,就是是上面4楼说的.要不要用弄个隧道来转发?这样避免我中转机被封?

        10 个月 后