如何通过软路由管理设备的网络分流,iptables立大功

Tilerphy 19评论
我们各自家中的网络环境不一致,面对的需求也不一样,我来介绍一下我如何使用iptables完成我家的网络分配。

我目前有的:
1. 三台海外服务器,两台来自公司商用网络分别在美国、新加坡,另外一台自购的香港服务器。全部部署了socks协议的转发通道,端口分别是us:10000,sg:20000,hk:22222
2. 家中主路由是TPlink WDR8500,熟悉我的朋友都知道我从智能路由上退烧了,现在就喜欢这种嘎嘣干脆的设备。主路由内网地址192.168.0.1,但网段是192.168.0-254.0-254
3. 主路由下级有一个由树莓派4假设的服务器,树莓派4的真实ip是192.168.88.139
4. 树莓派 0.0.0.0:1935 通过nginx-rtmp模块监听rtmp请求,并同时将所有的rtmp请求转发至通过ps4broadcast设置的目标rtmp服务器(bilibili或者斗鱼什么的)。
5. 树莓派 0.0.0.0:6667 通过nodejs监听了请求,如果接受到IRC协议的连接请求,则保持静默连接,
当接收到消息请求时,将消息转发到所有保持静默连接的客户端。
这是为PS4准备的弹幕,PS4在直播时,弹幕是通过Twitch IRC协议获取的,我需要拦截这些请求,越过Twitch,而是让ps4broadcast去管理。
ps4broadcast则是去拉取目标rtmp的房间弹幕发回给PS4 。
现在通过测试得知,PS5依然使用IRC协议,完美兼容了。
6. 树莓派 0.0.0.0:8118 做http proxy,通过privoxy做socks to http的转换,给局域网内浏览器使用。
7. 树莓派 0.0.0.0:56666 做ps4broadcast服务端口
8. 树莓派 0.0.0.0:12345 转发 us:10000 的socks通道
9. 树莓派 0.0.0.0:23456 转发 sg:20000 的socks通道
10. 树莓派 0.0.0.0:34567 转发 hk:22222 的socks通道

我需要的是什么:
1. PS4\PS5发出的游戏的信息发送到 hk:22222 的socks通道,以加速联机游戏的响应速度
2. PS4\PS5发出的其他信息发送到 sg:20000 的socks通道,以加速联机游戏的响应速度
3. 最开始我想通过443、80端口标记非游戏请求,但是发现其实不能全包含。后来发现PS5可以支持多个网络配置保存,PS4也能每种连接方式保存一个配置。
我就想,那就通过PS4 PS5的ip地址来确定用途吧。
4. PS4\PS5 发到*:1935 和 *:6667的数据,也就是PS4PS5发往任何1935端口和6667端口的数据,全部转发到192.168.88.139:1935 和 192.168.88.139:6667
5. 科学的上网途径

画好图,就开干,介绍完背景,用iptables来实现。

以下部分树莓派debian系统中可以运行。

#先是设置一个虚拟的网络接口,给上192.168.200.1的ip,准备作为虚拟的网关
#并且需要开启linux系统的ipv4的转发功能
ifconfig eth0:2 192.168.200.1 netmask 255.255.255.0
sysctl -w net.ipv4.ip_forward=1
sysctl -p
#然后就是通过nat的方式拦截并且通过目的端NAT(DNAT)方式重定向到 192.168.200.1对应端口
# 别看iptables很乱,但很好理解 -s 是 source, -j 是 jump, -p 是 protocol
iptables -t nat -A PREROUTING --ipv4 -s 192.168.200.1 -j RETURN
iptables -t nat -A PREROUTING -p tcp --dport 1935 -j DNAT --to-destination 192.168.200.1:1935
iptables -t nat -A PREROUTING -p tcp --dport 6667 -j DNAT --to-destination 192.168.200.1:6667
iptables -t nat -A POSTROUTING --ipv4 -j MASQUERADE
#创建一个自定义的mangle chain用于透明通道
iptables -t mangle -N PlayStation
#先设置放过本地的请求与广播
iptables -t mangle -A PlayStation -d 127.0.0.1/32 -j RETURN
iptables -t mangle -A PlayStation -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A PlayStation -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A PlayStation -d 192.168.0.0/16 -p tcp -j RETURN
#mangle chain 中也要有1935和6667的转发设置,不过设置的是忽略,交由nat处理
iptables -t mangle -A PlayStation -d 0/0 -p tcp --dport 1935 -j RETURN
iptables -t mangle -A PlayStation -d 0/0 -p tcp --dport 6667 -j RETURN
# 我用的是自己的DNS整合服务器,局域网内的53端口请求需要拦截,其余的放过
iptables -t mangle -A PlayStation -d 192.168.0.0/16 -p udp ! --dport 53 -j RETURN
# 用mangle 给专属的ip和网段打标机,并且转发到相应的通道
# 游戏通道发送到34567
iptables -t mangle -A PlayStation -p udp -s 192.168.200.150 -j TPROXY --on-port 34567 --tproxy-mark 1
iptables -t mangle -A PlayStation -p tcp -s 192.168.200.150 -j TPROXY --on-port 34567 --tproxy-mark 1
#其他通道发送到23456
# 由于上一条滤走了192.168.200.150,这里可以整个网段进行设置
iptables -t mangle -A PlayStation -p udp -s 192.168.200.0/24 -j TPROXY --on-port 23456 --tproxy-mark 1
iptables -t mangle -A PlayStation -p tcp -s 192.168.200.0/24 -j TPROXY --on-port 23456 --tproxy-mark 1
# 整上,生效
iptables -t mangle -A PREROUTING -j PlayStation

这样重启树莓派4之后,给PS4\PS5这样设置网络:
ip: 192.168.200.13
掩码: 255.255.255.0
网关: 192.168.200.1
DNS: 随意
这样,PS4\PS5的网络请求就会走向树莓派的0.0.0.0:23456通道。
当PS4、PS5的IP更改为192.168.200.150的时候,网络请求会走向到 树莓派 0.0.0.0:34567 通道。
两种情况下,PS4PS5只要开启直播,那么视频流就会重定向到 树莓派 0.0.0.0:1935,PS4\PS5也会连接到树莓派的0.0.0.0:6667的IRC服务器等待弹幕push。

当然在这场景下,如果把其他设备的IP和网关也设置成这样,会有一样的效果,用obs直播的时候,也会遵守1935的转发规则。
=========================
可能,我不是爱玩游戏,只是爱折腾。
评论
  • #9545 jhzthpp
    哦错,我连折腾都不会。因主这套操作让我看傻了。。。
    评论(2)  
    • #9550 Tilerphy
      周末净折腾这个了。几乎没怎么玩游戏。
    • #9552 jhzthpp
      回复 #9550:我前段时间写攻略也好几天晚上没玩游戏
  • #9587 KillerQuin
    太会折腾了兄弟
    评论(1)  
    • #9669 Tilerphy
      折腾起来不睡觉了都
  • #9633 deadkid414
    这完全看不懂的告辞
    评论(1)  
    • #9670 Tilerphy
      害,这些东西懂得都懂
  • #9658 gxy888
    给俺也整一套☺
    评论(2)  
    • #9671 Tilerphy
      给钱给钱给钱
    • #9679 gxy888
      回复 #9671:还要给钱?你不会自费来去路费+食宿上门帮我整一套啊?临走前在强行塞我500红包 毕竟我是穷学生 不要不识抬举 哈哈
  • #9666 Renegade
    惊了!完全看不懂。我这边联通裸连效果还不错
    评论(1)  
    • #9672 Tilerphy
      主要是打一些以前没法打的游戏
  • #9677 東方伊吹
    还是提了废厉害,这玩意儿我一眼瞄过去就是很高深的感觉
    评论(1)  
    • #9680 Tilerphy
      今年我干的大工程不少
  • #9755 Ryuzero
    果然是爱折腾 太强了
    评论(1)  
    • #9813 Tilerphy
      就是干,还年轻,折腾
  • 大兄弟真特娘的是个人才,太会倒腾了
    评论  
  • #10264 工力才
    直接看傻[DOGE]
    评论  
  • #10410 gxy888
    这一般人根本看不懂 只能叫楼主上门操作☺
    评论  
发表评论,请先 登录
「游戏基因」是一个中文化的游戏内容创作和交流平台。来加入我们吧。
TOP