桌面系统,两块网卡正常都开启的情况下,流量总是默认走 enp4s0f0,绝对不走 f1,如何设置某些程序走 f1?不会 iptables 命令

2021-01-15 13:33:12 +08:00
 cathedrel

manjaro,日常工作电脑,主板上的两个网口各接一个路由器,除非关闭 f0,否则所有流量默认走 f0,绝对不走 f1 (开 iptraf-ng 观测的结果),请问如何在 f0 不关闭的情况下能指定某个程序的流量走 f1 ?两个路由器的内网网段都设置的 192.168.10.x,

2491 次点击
所在节点    Linux
16 条回复
julyclyde
2021-01-15 14:22:10 +08:00
首先你这网络设置就不对
no1xsyzy
2021-01-15 15:00:26 +08:00
不会 iptables 命令,那就去学 iptables 命令
但是内网网段一致的话,比较有挑战,你得时刻记着自己写的这是哪个的……
Cat73
2021-01-15 15:14:24 +08:00
不是某些程序,是某些地址吧,根据路由表
LiYanHong
2021-01-15 15:18:32 +08:00
可以设置不同用户走不同网卡,然后用指定用户运行需要的程序
cathedrel
2021-01-15 16:47:04 +08:00
@julyclyde 请问该怎么设置呢?
cathedrel
2021-01-15 16:48:11 +08:00
@no1xsyzy 会一点 firewalld 命令,能用起来吗?如有必要,内网网段可以设不一样,那么该怎么设置呢?求教
cathedrel
2021-01-15 16:49:37 +08:00
@Cat73 如果能设置某些地址走哪张网卡可以,怎么设置呢?
cathedrel
2021-01-15 16:50:42 +08:00
@LiYanHong 这样子不是最理想状况,不过也想了解一下怎么设置不同用户走不同网卡,请指点一下
Cat73
2021-01-15 16:55:11 +08:00
@cathedrel route 系列命令,配置路由表
teawithlife
2021-01-15 17:07:34 +08:00
先把两个网卡的地址改为非同一网段,不然很可能出现各种奇怪的问题

如果要所有流量都走 enp4s0f1,运行以下命令
sudo ip route del default
sudo ip route add default via <enp4s0f1 本地 IP> dev enp4s0f1

如果只是部分目标 IP 的流量走 enp4s0f1,比如 123.0.0.0/8 的流量,那么执行
sudo ip route add 123.0.0.0/8 via <enp4s0f1 本地 IP> dev enp4s0f1

要按程序来指定的话,估计只能通过 iptables 了
guochao
2021-01-15 17:47:44 +08:00
建立 net_cls cgroup,对 cgroup 进行 mark,在 route 中使用 mark 建立路由

如果需要的话可以用 systemd-slice 对一组 exec 进行 mark 。或者自己写脚本。

除此之外,还可以用这个方法对单独的进程设置防火墙或者施行 traffic shaping

ref:
这篇博客描述了大概的做法: https://www.evolware.org/?p=369
防止博客崩掉贴上 Archive: https://web.archive.org/web/20201112024042/https://www.evolware.org/?p=369
Arch Wiki - cgroups: https://wiki.archlinux.org/index.php/Cgroups
man pages - cgroups: https://man7.org/linux/man-pages/man7/cgroups.7.html
man pages - ip-route: https://man7.org/linux/man-pages/man8/ip-route.8.html
cathedrel
2021-01-15 17:53:48 +08:00
@teawithlife 谢谢大侠
如果要按照程序来指定的话 iptabls 命令该怎么写?您再给个例子吧,谢谢!
cathedrel
2021-01-15 17:55:15 +08:00
@guochao 谢谢!您给的几个链接我回头慢慢看,谢谢!
LiYanHong
2021-01-15 22:59:20 +08:00
指定用户走指定网卡
iptables -t mangle -A OUTPUT -m owner –uid-owner 1001 -j MARK –set-mark 1001
iptables -t nat -A POSTROUTING -m mark –mark 1001 -j SNAT –to-source 10.20.30.40
1001 是用户 id,10.20.30.40 是网卡 ip 地址
teawithlife
2021-01-16 09:31:01 +08:00
@cathedrel #12 iptables 肯定是能实现,11 楼的方法应该就可以。但是很抱歉,因为我自己没操作过,所以没法给你例子,你得自己看看文档了
tkl
2021-01-16 12:33:32 +08:00
@guochao 学到了 原来 cg 还可以控制网络

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745214

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX