Ubuntu 22.04で3つのネットワークインターフェイスからトラフィックを分離する方法
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.48 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::8276:83ab:72d6:1287 prefixlen 64 scopeid 0x20<link>
ether 9c:53:22:48:77:19 txqueuelen 1000 (Ethernet)
RX packets 7797 bytes 1129504 (1.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6828 bytes 593700 (593.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp8s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::b875:1df4:ff5e:9f09 prefixlen 64 scopeid 0x20<link>
ether d8:5e:d3:01:84:ed txqueuelen 1000 (Ethernet)
RX packets 135512185 bytes 8949006996 (8.9 GB)
RX errors 0 dropped 237 overruns 235 frame 0
TX packets 365038054 bytes 534261499563 (534.2 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xfa800000-fa81ffff
enp9s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.36 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 2403:6200:89a6:d09d:5606:aae2:c339:9eb1 prefixlen 64 scopeid 0x0<global>
inet6 2403:6200:89a6:d09d:d5ac:2515:913e:e2be prefixlen 64 scopeid 0x0<global>
inet6 fe80::272a:26bd:9d12:e881 prefixlen 64 scopeid 0x20<link>
ether d8:5e:d3:01:84:ee txqueuelen 1000 (Ethernet)
RX packets 274876935 bytes 23805585708 (23.8 GB)
RX errors 0 dropped 1956 overruns 0 frame 0
TX packets 740203694 bytes 1081935809783 (1.0 TB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp8s0はすでにデフォルトで192.168.0.1を介して接続された単独で動作し、192.168.1.1を介して接続されたenp9s0とシームレスに動作していましたが、eno1を追加したところ、問題が発生しました。
すべてのネットワークインターフェイスは、ISPが異なる3つのルータに接続され、eno1は追加のLAN PCIeカード、enp8s0とenp9s0はオンボードLANスロットです。
私のIPルーティング結果です
default via 192.168.1.1 dev enp9s0 proto dhcp metric 100
default via 192.168.0.1 dev enp8s0 proto dhcp metric 102
default via 192.168.1.1 dev eno1 proto dhcp metric 103
169.254.0.0/16 dev enp8s0 scope link metric 1000
192.168.0.0/24 dev enp8s0 proto kernel scope link src 192.168.0.101 metric 102
192.168.1.0/24 dev enp9s0 proto kernel scope link src 192.168.1.36 metric 100
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.48 metric 103
enp9s0はISP1に接続されているため、enp8s0はISP2に接続され、eno1はISP3に接続されます。
私はこの3つのトラフィックがISPに応じて別々に出たいと思います。乾燥すると分離されました。
money@money:~$ curl --interface enp8s0 ifconfig.me
101.108.144.237
money@money:~$ curl --interface enp9s0 ifconfig.me
14.207.43.37
money@money:~$ curl --interface eno1 ifconfig.me
171.100.22.228
しかし、rcloneを使用してファイルをアップロードすると停止します。
enp8s0を最初に追加する前に、これが発生しました。それ以前はネットワークインターフェースが1つだけでしたが、今はenp9s0です。
しなければならなかった
sudo ip route add 192.168.0.0/24 dev enp8s0 src 192.168.0.101 table rt2
sudo ip route add default via 192.168.0.1 dev enp8s0 table rt2
sudo ip rule add from 192.168.0.101/32 table rt2
sudo ip rule add to 192.168.0.101/32 table rt2
そしてそれを解決しました
これでeno1を追加し、上記の問題が再び発生し、両方を試しました。
sudo ip route add 192.168.1.0/24 dev eno1 src 192.168.1.48 table rt2
sudo ip route add default via 192.168.1.1 dev eno1 table rt2
sudo ip rule add from 192.168.1.48/32 table rt2
sudo ip rule add to 192.168.1.48/32 table rt2
そして
sudo ip route add 192.168.1.0/24 dev eno1 src 192.168.1.48 table rt3
sudo ip route add default via 192.168.1.1 dev eno1 table rt3
sudo ip rule add from 192.168.1.48/32 table rt3
sudo ip rule add to 192.168.1.48/32 table rt3
しかし、まだ通過できません。
IPルートリストテーブルの詳細
money@money:~$ ip route list table rt2
default via 192.168.0.1 dev enp8s0
192.168.0.0/24 dev enp8s0 scope link src 192.168.0.101
192.168.1.0/24 dev eno1 scope link src 192.168.1.48
money@money:~$ ip route list table rt3
default via 192.168.0.1 dev enp8s0
192.168.0.0/24 dev enp8s0 scope link src 192.168.0.101
192.168.1.0/24 dev eno1 scope link src 192.168.1.48
cat /etc/iproute2/rt_tablesの場合
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt2
1 rt3
IP結果
2: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether d8:5e:d3:01:84:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.1.36/24 brd 192.168.1.255 scope global dynamic noprefixroute enp9s0
valid_lft 9272sec preferred_lft 9272sec
inet6 2403:6200:89a6:d09d:5606:aae2:c339:9eb1/64 scope global temporary dynamic
valid_lft 581671sec preferred_lft 62705sec
inet6 2403:6200:89a6:d09d:d5ac:2515:913e:e2be/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 863871sec preferred_lft 431871sec
inet6 fe80::272a:26bd:9d12:e881/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether d8:5e:d3:01:84:ed brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global dynamic noprefixroute enp8s0
valid_lft 63271sec preferred_lft 63271sec
inet6 fe80::b875:1df4:ff5e:9f09/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 9c:53:22:48:77:19 brd ff:ff:ff:ff:ff:ff
altname enp10s0
inet 192.168.1.48/24 brd 192.168.1.255 scope global dynamic noprefixroute eno1
valid_lft 82853sec preferred_lft 82853sec
inet6 fe80::8276:83ab:72d6:1287/64 scope link noprefixroute
valid_lft forever preferred_lft forever
rcloneを使用してアップロードするときの3つのインターフェースの比較。最初は --bind オプションを追加せずに enp9s0 を通過するので、接続はプライマリラインを通過するので問題はありません。
money@money:~$ rclone move --verbose --transfers 2 --checkers 6 --bwlimit 1G --contimeout 120s --timeout 600s --retries 6 --low-level-retries 20 --buffer-size 128M --drive-chunk-size 128M --stats 1s /media/cache/vipx3 up:
2023/03/11 18:31:15 INFO : Starting bandwidth limiter at 1Gi Byte/s
2023/03/11 18:31:16 INFO :
Transferred: 0 B / 74.568 GiB, 0%, 0 B/s, ETA -
Checks: 0 / 1, 0%
Transferred: 0 / 1, 0%
Elapsed time: 1.0s
Checking:
Transferring:
* plot-k32-c7-2023-03-11…8a61bb6c66fc76752.plot: 0% /74.568Gi, 0/s, -
2023/03/11 18:31:18 INFO :
Transferred: 52.871 MiB / 74.568 GiB, 0%, 20.327 MiB/s, ETA 1h2m33s
Checks: 0 / 1, 0%
Transferred: 0 / 1, 0%
Elapsed time: 3.0s
Checking:
Transferring:
* plot-k32-c7-2023-03-11…8a61bb6c66fc76752.plot: 0% /74.568Gi, 20.327Mi/s, 1h2m33s
前述のIPルーティングルールを追加した後、enp8s0(192.168.0.101)を介したこの操作も通過しました。
money@money:~$ rclone move --bind 192.168.0.101 --verbose --transfers 2 --checkers 6 --bwlimit 1G --contimeout 120s --timeout 600s --retries 6 --low-level-retries 20 --buffer-size 128M --drive-chunk-size 128M --stats 1s /media/cache/vipx3 up:
2023/03/11 18:28:39 INFO : Starting bandwidth limiter at 1Gi Byte/s
2023/03/11 18:28:40 INFO :
Transferred: 0 B / 74.568 GiB, 0%, 0 B/s, ETA -
Checks: 0 / 1, 0%
Transferred: 0 / 1, 0%
Elapsed time: 1.0s
Checking:
Transferring:
* plot-k32-c7-2023-03-11…8a61bb6c66fc76752.plot: 0% /74.568Gi, 0/s, -
2023/03/11 18:28:42 INFO :
Transferred: 51.184 MiB / 74.568 GiB, 0%, 21.965 MiB/s, ETA 57m54s
Checks: 0 / 1, 0%
Transferred: 0 / 1, 0%
Elapsed time: 3.0s
Checking:
Transferring:
* plot-k32-c7-2023-03-11…8a61bb6c66fc76752.plot: 0% /74.568Gi, 21.965Mi/s, 57m54s
これが私が追加した最後のネットワークインターフェース(eno1)なので、今はアップロードできません。
money@money:~$ rclone move --bind 192.168.1.48 --verbose --transfers 2 --checkers 6 --bwlimit 1G --contimeout 120s --timeout 600s --retries 6 --low-level-retries 20 --buffer-size 128M --drive-chunk-size 128M --stats 1s /media/cache/vipx3 up:
2023/03/11 18:27:52 INFO : Starting bandwidth limiter at 1Gi Byte/s
2023/03/11 18:27:53 INFO :
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Elapsed time: 1.0s
2023/03/11 18:27:54 INFO :
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Elapsed time: 2.0s
2023/03/11 18:27:55 INFO :
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Elapsed time: 3.0s
2023/03/11 18:27:56 INFO :
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Elapsed time: 4.0s
eno1トラフィックが独自のゲートウェイ(enp8s0など)を通過する方法は?回線には、独立したISPに接続された独自のルータがあります。これでenp9s0と192.168.1.1を共有しているようです。
答え1
eno1のルーターにアクセスして問題を解決し、enp9s0のLANケーブルも削除しました。これは、192.168.1.1を共有し、IPを192.168.2.1に変更し、次の行を追加したためです。
sudo ip route add 192.168.0.0/24 dev enp8s0 src 192.168.0.101 table rt2
sudo ip route add default via 192.168.0.1 dev enp8s0 table rt2
sudo ip rule add from 192.168.0.101/32 table rt2
sudo ip rule add to 192.168.0.101/32 table rt2
問題が発生したときに何か問題が発生した可能性があるため、再起動するたびにenp8s0が無効になり、この問題を解決する方法がまだわかりません。 crontrabを追加しましたが、sudo ifconfig enp8s0 up
起動時にまだ表示されませんでした。結局、GUIを介して有効にする必要がありました。動作します。
それから私はこれを追加します
sudo ip route add 192.168.2.0/24 dev eno1 src 192.168.2.36 table rt1
sudo ip route add default via 192.168.2.1 dev eno1 table rt1
sudo ip rule add from 192.168.2.36/32 table rt1
sudo ip rule add to 192.168.2.36/32 table rt1
sudo ip route add default via 192.168.2.1 metric 101 dev eno1
IPルールの結果
0: from all lookup local
32756: from all to 192.168.0.101 lookup rt2
32757: from 192.168.0.101 lookup rt2
32758: from all to 192.168.2.36 lookup rt1
32759: from 192.168.2.36 lookup rt1
32760: from all to 192.168.0.101 lookup rt2
32761: from 192.168.0.101 lookup rt2
32762: from all to 192.168.0.101 lookup rt2
32763: from 192.168.0.101 lookup rt2
32764: from all to 192.168.2.36 lookup rt1
32765: from 192.168.2.36 lookup rt1
32766: from all lookup main
32767: from all lookup default
IPルーティングのリストです
money@money:~$ ip route list table rt2
default via 192.168.0.1 dev enp8s0
192.168.0.0/24 dev enp8s0 scope link src 192.168.0.101
money@money:~$ ip route list table rt1
default via 192.168.2.1 dev eno1
192.168.2.0/24 dev eno1 scope link src 192.168.2.36
その後、nload -mを実行するときにenp9s0が使用されていないことを確認して追加しました。
sudo ip route add 192.168.1.0/24 dev enp9s0 src 192.168.1.36 table rt3
sudo ip route add default via 192.168.1.1 dev enp9s0 table rt3
sudo ip rule add from 192.168.1.36/32 table rt3
sudo ip rule add to 192.168.1.36/32 table rt3
sudo ip route add default via 192.168.0.1 metric 100 dev enp8s0
sudo ip route add default via 192.168.1.1 metric 101 dev enp9s0
sudo ip route add default via 192.168.2.1 metric 102 dev eno1
これで、状況は期待どおりに機能します。