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을 사용하여 업로드할 때 세 가지 인터페이스 비교. 첫 번째는 --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
이제 상황이 예상대로 작동합니다.