如何通过软路由管理设备的网络分流,iptables立大功
我们各自家中的网络环境不一致,面对的需求也不一样,我来介绍一下我如何使用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的转发规则。
=========================
可能,我不是爱玩游戏,只是爱折腾。
我目前有的:
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的转发规则。
=========================
可能,我不是爱玩游戏,只是爱折腾。
评论
-
哦错,我连折腾都不会。因主这套操作让我看傻了。。。
-
太会折腾了兄弟
-
这完全看不懂的告辞
-
给俺也整一套☺
-
惊了!完全看不懂。我这边联通裸连效果还不错
-
还是提了废厉害,这玩意儿我一眼瞄过去就是很高深的感觉
-
果然是爱折腾 太强了
-
大兄弟真特娘的是个人才,太会倒腾了
-
直接看傻[DOGE]
-
这一般人根本看不懂 只能叫楼主上门操作☺
发表评论,请先 登录