사례상상하다(칼리리눅스RaspBerry Pi 2 B+의 v2:
luis@Fresoncio:~$ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.18.25.1 0.0.0.0 UG 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 100 0 0 eth1
default 192.168.35.100 0.0.0.0 UG 101 0 0 eth2
... etc (see full table below)
이더넷(RJ45 케이블) 카드(NIC):
luis@Fresoncio:~$ sudo ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.25.246 netmask 255.255.255.0 broadcast 172.18.25.255
inet6 fe80::ba27:ebff:fe92:feb3 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:92:fe:b3 txqueuelen 1000 (Ethernet)
RX packets 3013014 bytes 296362931 (282.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9910966 bytes 558782777 (532.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.33 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::b117:1000:39bb:f8f0 prefixlen 64 scopeid 0x20<link>
ether a0:ce:c8:09:e3:ef txqueuelen 1000 (Ethernet)
RX packets 97636 bytes 7342211 (7.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 471 bytes 31163 (30.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.35.104 netmask 255.255.255.0 broadcast 192.168.35.255
inet6 fe80::805b:dfe3:8c3b:61ff prefixlen 64 scopeid 0x20<link>
ether a0:ce:c8:09:f8:84 txqueuelen 1000 (Ethernet)
RX packets 276507 bytes 18134656 (17.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 215 bytes 19996 (19.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 96 bytes 12362 (12.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 96 bytes 12362 (12.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
--- etc (see fulll table below)
이 컴퓨터에 있는 것을 볼 수 있습니다.네트워크 카드 3개.인터넷에 ping을 실행하면 작동합니다.NIC를 지정할 때 다음을 모두 사용하십시오.
luis@Fresoncio:~$ sudo ping -I eth0 -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 172.18.25.246 eth0: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=36.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=308 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=85.5 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=54 time=151 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=54 time=56.6 ms
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 36.753/127.695/308.472/98.316 ms
luis@Fresoncio:~$ sudo ping -I eth1 -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.1.33 eth1: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=43.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=41.0 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=55 time=40.7 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=55 time=41.5 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=55 time=40.9 ms
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 40.757/41.517/43.303/0.962 ms
luis@Fresoncio:~$ sudo ping -I eth2 -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.35.104 eth2: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=50.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=37.4 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=55 time=49.2 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=55 time=37.7 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=55 time=53.2 ms
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 37.499/45.711/53.250/6.723 ms
지금실패사례상상하다 (우분투 v16노트북의 경우):
luis@Hipatio:~$ sudo route
Tabla de rutas IP del núcleo
Destino Pasarela Genmask Indic Métric Ref Uso Interfaz
default Router- 0.0.0.0 UG 0 0 0 enp2s0
default 192.168.22.1 0.0.0.0 UG 100 0 0 enx3c18a00b753d
link-local * 255.255.0.0 U 1000 0 0 enp2s0
192.168.11.0 * 255.255.255.0 U 0 0 0 enp2s0
192.168.22.0 * 255.255.255.0 U 100 0 0 enx3c18a00b753d
이번에 가장 중점을 두는 것은RJ45 케이블 NIC 2개:
luis@Hipatio:~$ ifconfig
enp2s0 Link encap:Ethernet direcciónHW 68:f7:28:d2:a4:ce
Direc. inet:192.168.11.119 Difus.:192.168.11.255 Másc:255.255.255.0
Dirección inet6: fe80::6af7:28ff:fed2:a4ce/64 Alcance:Enlace
ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST MTU:1500 Métrica:1
Paquetes RX:454517 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:1940326 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1000
Bytes RX:73243397 (73.2 MB) TX bytes:2778755895 (2.7 GB)
enx3c18a00b753d Link encap:Ethernet direcciónHW 3c:18:a0:0b:75:3d
Direc. inet:192.168.22.51 Difus.:192.168.22.255 Másc:255.255.255.0
Dirección inet6: fe80::4c9d:de01:a97a:fd42/64 Alcance:Enlace
ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST MTU:1500 Métrica:1
Paquetes RX:194 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:355 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1000
Bytes RX:20096 (20.0 KB) TX bytes:39265 (39.2 KB)
lo Link encap:Bucle local
Direc. inet:127.0.0.1 Másc:255.0.0.0
Dirección inet6: ::1/128 Alcance:Anfitrión
ACTIVO BUCLE FUNCIONANDO MTU:65536 Métrica:1
Paquetes RX:60 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:60 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1
Bytes RX:5099 (5.0 KB) TX bytes:5099 (5.0 KB)
이 시간실패하다(응답 없음) 기본이 아닌 NIC에서 핑을 보내는 경우:
luis@Hipatio:~$ ping -I enx3c18a00b753d -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.22.51 enx3c18a00b753d: 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 3999ms
이것기본적으로 하나가 유효합니다.좋아요:
luis@Hipatio:~$ ping -I enp2s0 -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.11.119 enp2s0: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=51.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=52.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=55 time=50.9 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=55 time=50.8 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=55 time=51.0 ms
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 50.812/51.498/52.995/0.826 ms
luis@Hipatio:~$ ping -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=51 time=57.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=51 time=57.0 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=51 time=57.0 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=51 time=57.1 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=51 time=57.6 ms
같은 테스트역시 실패했다존재하다RaspBerry Pi 2 B+용 Ubuntu Mate v16(이번에는 RJ45 네트워크 카드 4개): 기본 카드만 작동합니다. 그래서 문제가 Ubuntu에 있어야 하는지 궁금합니다(이 핑 테스트는 v14와 같은 이전 Ubuntu 버전에 대한 것이라고 확신합니다). 어쨌든 Linux 문제를 해결하는 방법을 아는 것이 나에게는 가장 좋은 일입니다.
여기서 무슨 일이 일어나고 있으며 어떻게 해야 합니까?특정 NIC에서 핑?
참고 1: 첫 번째 예의 Kali 작업 배포판에는 여러 개의 VPN이 동시에 작동하므로(읽기가 다소 혼란스럽습니다) 테이블을 제거했습니다 route
. 정식 버전은 다음과 같습니다(필요하지는 않지만...누가 알겠습니까?).
luis@Fresoncio:~$ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.18.25.1 0.0.0.0 UG 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 100 0 0 eth1
default 192.168.35.100 0.0.0.0 UG 101 0 0 eth2
115.red-79-157- 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
67.red-79-157-8 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
187.red-81-32-1 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
227.red-81-32-1 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
82.red-81-33-18 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
190.red-83-44-1 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
152.red-83-44-2 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
249.red-83-44-2 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
10.red-83-52-23 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
172.red-83-52-2 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
206.red-83-52-2 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
33.244.222.87.d 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
32.246.222.87.d 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
235.248.222.87. 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
151.18.16.95.dy 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
196.48.16.95.dy 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
143.49.16.95.dy 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
189.54.16.95.dy 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
122.56.16.95.dy 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
11.81.20.95.dyn 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
237.204.22.95.d 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
177.206.22.95.d 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
163.red-95-123- 172.18.25.1 255.255.255.255 UGH 0 0 0 eth0
172.18.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1
192.168.35.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
192.168.35.0 0.0.0.0 255.255.255.0 U 100 0 0 eth2
192.168.210.0 0.0.0.0 255.255.255.0 U 0 0 0 ppp0
192.168.211.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
...이것이 완료되었습니다 ifconfig
.
luis@Fresoncio:~$ sudo ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.25.246 netmask 255.255.255.0 broadcast 172.18.25.255
inet6 fe80::ba27:ebff:fe92:feb3 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:92:fe:b3 txqueuelen 1000 (Ethernet)
RX packets 3018864 bytes 296745295 (282.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9911793 bytes 558868110 (532.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.33 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::b117:1000:39bb:f8f0 prefixlen 64 scopeid 0x20<link>
ether a0:ce:c8:09:e3:ef txqueuelen 1000 (Ethernet)
RX packets 97908 bytes 7362465 (7.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 480 bytes 31821 (31.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.35.104 netmask 255.255.255.0 broadcast 192.168.35.255
inet6 fe80::805b:dfe3:8c3b:61ff prefixlen 64 scopeid 0x20<link>
ether a0:ce:c8:09:f8:84 txqueuelen 1000 (Ethernet)
RX packets 277209 bytes 18180584 (17.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 223 bytes 20612 (20.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 96 bytes 12362 (12.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 96 bytes 12362 (12.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1446
inet 192.168.210.141 netmask 255.255.255.0 destination 192.168.210.1
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 461 bytes 43679 (42.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 423 bytes 90174 (88.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 192.168.211.141 netmask 255.255.255.0 destination 192.168.211.141
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 14 bytes 704 (704.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
노트 2: 새로운 단서. 연구를 통해 알아낸 것은다중 라우팅 기능이 옵션 은 필수 CONFIG_IP_MROUTE_MULTIPLE_TABLES
이거나CONFIG_IP_MULTIPLE_TABLES
핵심.
이것이 출력인 한 나는 이것이 의심스럽다.실패하다컴퓨터:
luis@Hipatio:/usr/src/linux-headers-4.4.0-62-generic$ cat .config | grep "multiple" -i
# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
CONFIG_NEED_MULTIPLE_NODES=y
CONFIG_IP_MULTIPLE_TABLES=y
# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
# Multiplexer I2C Chip support
이것은피복재컴퓨터:
luis@Fresoncio:/usr/src/kernel$ cat .config | grep "multiple" -i
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
# Multiplexer I2C Chip support
노트 3:테스트된(또는 그렇게 생각합니다) 메서드 참조노트 2/etc/default/grub
줄을 수정하면 다음과 같습니다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash CONFIG_IP_MROUTE_MULTIPLE_TABLES=y"
보시다시피, 시스템은 이제 다음 매개변수로 시작됩니다 yes
.
luis@Hipatio:~$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.4.0-62-generic root=UUID=66464d51-851f-4623-b5cb-1699901a4a9b ro quiet splash CONFIG_IP_MROUTE_MULTIPLE_TABLES=y vt.handoff=7
안타깝게도결과가 없다. ping이 여전히 실패합니다.
답변1
기본적으로 시스템은 실제로 지정된 대상에 대해 하나의 경로를 사용하며, 이는 ip route get 8.8.8.8
이전 명령에서 표시된 패킷이 아닌 인터페이스에서 패킷을 수신하는 경우 일종의 스푸핑 시도로 간주됩니다. 그리고 그것을 폐기하십시오. 역방향 경로 필터링이 비활성화된 경우 다음 작업이 수행되지 않습니다.
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/enx3c18a00b753d/rp_filter.
가능하다면 항상 기본 경로를 사용하는 것이 가능하며 느슨한 모드가 선호됩니다(값 2를 사용하고 enp2s0에는 1을 남겨둡니다).
귀하의 의견과 관련하여 enp2s0에는 경쟁 조건이 없습니다. 라우팅 테이블은 이러한 설정에 의해 변경되거나 변경되지 않으므로 경쟁이 발생하지 않습니다. 보다ip-sysctl.txt Linux 커널 문서 자세한 내용은.
이제 여러분의 목표를 위해 이것은 실제로 해야 할 일이 아닙니다. 경로를 설정해야 합니다.테이블인터페이스/공급자별 및소스 IP(그런데 이것이 바로 CONFIG_IP_MULTIPLE_TABLES의 목적입니다. CONFIG_IP_MROUTE*는 멀티캐스트용입니다.) 그런 다음 일부 선택 논리를 사용하십시오.ip
rule
주문하다. 하나 이상의 가능성이 있습니다.예를 들어iptables를 사용하여 패킷을 표시하고 해당 표시를 더 많은 경로에 사용규칙또는 예시 중 하나에서처럼 특정 대상에 대한 특정 경로를 설정하는 것이 훨씬 더 간단합니다(끝 참조).
모든 세부정보에는 예시가 포함되어 있습니다.
http://lartc.org/howto/lartc.rpdb.multiple-links.html
여기에 직접 실제 예제를 넣는 것은 약간 길지만 따라하기 쉬운 것 같습니다(일부 주의사항 등 포함). 이 경우 라우팅 알고리즘이 이전만큼 간단하지 않더라도 패킷은 항상 예상 인터페이스를 통해 도착하므로 더 이상 rp_filter를 변경할 필요가 없습니다.
경로 기반 로드 밸런싱 예제와 달리 해당 작업이 완료되면 iptables를 사용하여 작업을 수행할 수 있습니다. 예를 들어 nat 테이블의 statistic
모듈을 결합하여 --every
사용하는 여러 SNAT(공급자당 하나씩)를 사용하여 모든 새 연결의 부하를 동적으로 분산합니다.