동일한 시스템의 서로 다른 서브넷에 두 개의 NIC를 설정하고 한 NIC에서 다른 NIC로 라우팅하려면 어떻게 해야 합니까?

동일한 시스템의 서로 다른 서브넷에 두 개의 NIC를 설정하고 한 NIC에서 다른 NIC로 라우팅하려면 어떻게 해야 합니까?

두 개의 네트워크 카드가 있는 컴퓨터(RPi CM4)가 있습니다. 하나(eth0)는 네트워크 1에 설정되고 다른 하나(eth1)는 네트워크 2에 설정되기를 원합니다. net1에서 net2의 컴퓨터를 볼 수 있어야 합니다. eth0을 192.168.1.x/23, 게이트웨이 192.168.1.1로 설정했습니다. eth1을 192.168.0.x로 설정했습니다. eth0에만 연결하고 192.168.1.x로 ssh 및 ping을 할 수 있는데 eth1에 연결하면 연결이 되지 않습니다. .

ip r다음을 제공합니다:

    default via 192.168.1.1 dev eth0 src 192.168.1.224 metric 202 
default via 192.168.1.1 dev eth1 src 192.168.0.200 metric 203 
192.168.0.0/24 dev eth1 proto dhcp scope link src 192.168.0.200 metric 203 
192.168.0.0/23 dev eth0 proto dhcp scope link src 192.168.1.224 metric 202 

route다음을 제공합니다:

    Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.1     0.0.0.0         UG    203    0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     203    0        0 eth1
192.168.0.0     0.0.0.0         255.255.254.0   U     202    0        0 eth0

ip addr

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether e4:5f:01:dc:d3:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.1.224/23 brd 192.168.1.255 scope global noprefixroute eth0
   valid_lft forever preferred_lft forever
inet6 fe80::8b50:c7e0:6f8d:a2aa/64 scope link 
   valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 84:8b:cd:4a:a1:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.0.200/24 brd 192.168.0.255 scope global noprefixroute eth1
   valid_lft forever preferred_lft forever
inet6 fe80::7e0e:d55b:12a1:f029/64 scope link 
   valid_lft forever preferred_lft forever

나는 완전히 인터넷 바보입니다. 비슷한 질문을 읽어보았지만 여전히 혼란스럽습니다.

ELIA5, 192.168.1.x에서 볼 수 있도록 192.168.0.x를 라우팅하려면 어떻게 해야 합니까?

main network/inet (192.168.1.x) <-> CM4 eth1(192.168.1.200) eth0(192.168.0.60) <-> private LAN(192.168.0.50)

답변1

배경

네트워크 마스크(또는 간단히 "마스크")는 IP 주소가 네트워크 부분과 호스트 부분으로 분할되는 방식을 정의합니다. IP 프로토콜은 기본적으로 원격 호스트의 IP 주소와 인터페이스의 IP 주소에 일치하는 네트워크 부분이 있는 경우 네트워크 인터페이스가 원격 호스트에 직접 연결할 수 있다고 가정합니다. 네트워크 부분이 다른 경우 시스템은 라우팅 테이블을 확인하여 수행할 작업을 결정해야 합니다.

IPv4 넷마스크는 가장 중요한 비트부터 시작하여 특정 비트 위치가 모두 1이 되고 그 다음에는 모두 0이 되는 32비트 값으로 완전히 표시됩니다. 1 비트는 IP 주소의 해당 비트가 주소의 네트워크 부분의 일부임을 나타내고 0 비트는 각각 호스트 부분을 나타냅니다. 그러므로 네트워크 마스크를 단지 1비트의 양으로 설명하는 것이 편리합니다.넷마스크 길이, 그러나 간결함을 위해 간단히 "마스크"라고 부르는 경우가 많습니다. 따라서 마스크 /24는 일반 베이스 10 IP 주소 형식에서는 255.255.255.0으로 정확하게 기록되거나 이진수에서는 11111111.11111111.11111111.00000000으로 기록됩니다.

넷마스크 길이가 8로 나누어지면 네트워크와 호스트 부분의 분리는 IP 주소의 10진수 표현과 일치합니다. 이는 인간이 쉽게 이해할 수 있는 것입니다. 예를 들어 192.168.0.251/24네트워크 부분이 있는 IP 주소의 표현은 의 위치는 입니다 192.168.0. 호스트 부분은 입니다 .251.

8로 나누어지지 않는 넷마스크를 이해하려면 약간의 이진수학이 필요합니다. 그러나 간단히 말해서 192.168.0.0/23은 첫 번째 주소가 192.168.0.0이고 마지막 주소가 192.168.1.255인 네트워크를 의미하므로 네트워크 중 하나가 다른 네트워크의 서브넷이 됩니다. 반면에 귀하의 지침에는 과 /24 마스크가 ip addr모두 구성되어 있습니다 . ( 출력의) 또는 (의 ) 라우팅 테이블 항목 중 어느 것도 네트워크 인터페이스의 구성과 일치해서는 안 됩니다.eth0eth1gatewayroutevia x.x.x.xip r어딘가에 오타나 기타 오류가 있는 것 같습니다.복사한 출력이 ip addr/output과 일치하지 않습니다.ip rroute


라우팅 테이블은 가장 구체적인 항목(= 넷마스크가 가장 큰 항목)부터 시작하여 보다 일반적인 항목(더 작은 넷마스크 값)까지 처리됩니다. 기본 게이트웨이 항목은 가장 일반적인 항목이며 아직 다른 항목과 일치하지 않는 모든 주소와 일치합니다. 기술적으로 이는 마스크 길이가 /0인 모두 0인 IP 주소로 표시될 수 있습니다.

인간의 관점에서 라우팅 테이블의 기본 게이트웨이 항목은 "주소에 직접 연결할 수 없고 더 이상 구체적인 지침이 없는 경우 직접 연결할 수 있는 이 시스템으로 보내면 어떻게 해야 할지 알 것입니다."입니다. .

네트워크 인터페이스에 대한 IP 주소와 네트워크 마스크를 구성하면 Linux 커널은 인터페이스에서 직접 연결할 수 있는 호스트와 일치하는 네트워크 마스크를 기반으로 라우팅 테이블 항목을 자동으로 생성합니다. 따라서 시스템에 서로 다른 네트워크 세그먼트에 연결된 두 개의 네트워크 인터페이스가 있고 인터넷에 연결되어 있지 않은 경우 시스템에는 수동 라우팅 항목이 전혀 필요하지 않으며 기본 게이트웨이도 필요하지 않습니다. 하지만두 네트워크의 다른 호스트"다른" 네트워크가 2-인터페이스 호스트를 통해 라우팅될 수 있다는 것을 알기 위해서는 라우팅 테이블 항목이 필요합니다.

로컬로 액세스할 수 있는 네트워크와 기타 네트워크만 있는 경우 2-인터페이스 호스트를 가리키는 기본 게이트웨이 항목으로 충분하지만 인터넷 연결도 관련된 경우 기본 게이트웨이는 다른 모든 네트워크 세그먼트와 마찬가지로 인터넷 라우터를 가리켜야 합니다. 전 세계에서는 그것을 통해 도달할 것이며 하나씩 열거하고 싶지 않을 것입니다.) 그리고 생성된 기본 게이트웨이 항목이 2개의 인터페이스 호스트를 가리키지 않는 경우에는 다음을 알려주는 특정 경로 항목도 필요합니다. "나의 다른 네트워크 세그먼트에는 이 네트워크 주소와 이 넷마스크가 있으며 2-인터페이스 호스트를 전달할 수 있습니다."


뭘하길 원해

출력이 정확하고 두 개의 서로 다른 네트워크 세그먼트(하나는 192.168.0.x/24이고 다른 하나는 192.168.1.x/24)가 있다고 가정하면 ip addr두 세그먼트 사이를 이동하려면 네 가지 작업을 수행해야 합니다. 라우팅을 활성화합니다.

1.) CM4에서 IPv4 라우팅 마스터 스위치를 활성화합니다.

echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
sysctl -p

2.) CM4의 방화벽 규칙이 전달을 허용하는지 확인하십시오. 즉, iptables -L FORWARD -vn정책 ACCEPT는 있지만 규칙은 없거나 정책이 DROP인 경우 적절한 ACCEPT 규칙이 있습니다. 일부 배포판에서는 기본적으로 전달 정책을 DROP으로 설정합니다. 이 경우 두 가지 규칙이 필요합니다.

iptables -I FORWARD 1 -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -I FORWARD 2 -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT

인간의 관점에서 보면 192.168.0.x에서 들어오고 192.168.1.x로 향하는 패킷은 전달(라우팅)이 허용되고 그 반대의 경우도 마찬가지입니다.

이러한 규칙을 지속시키려면 iptables-save출력을 실행하고 배포에 적합한 파일로 리디렉션할 수 있습니다. 시스템이 ufw다른 방화벽 구성 도구를 사용하는 경우 이를 사용하여 동등한 영구 규칙을 구성하십시오.

3.) 192.168.0.x 개인 LAN의 호스트에서: 기본 게이트웨이를 192.168.0.60으로 설정합니다. 이 세그먼트에는 인터넷 게이트웨이가 없으므로 이것이 필요한 유일한 라우팅 항목입니다. (나중에 개인 LAN에서 나가는 인터넷 액세스를 활성화하려면 CM4에서 iptables FORWARD 규칙을 변경하면 됩니다.)

4.) 192.168.1.x 기본 네트워크의 호스트: 이러한 호스트에는 이미 192.168.1.1의 기본 게이트웨이 설정이 있어야 합니다. 이를 변경하면 해당 호스트의 인터넷 연결이 끊어집니다. 따라서 여기서는 "마스크가 /24인 네트워크 192.168.0.x는 192.168.1.200 경로를 통해 도달할 수 있습니다"라는 특정 경로를 정의해야 합니다.

Linux 구성 명령의 경우 다음과 같습니다.

ip route add 192.168.0.0/24 via 192.168.1.200

또는

route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.1.200

다른 운영 체제에서는 약간 다른 구문이 필요할 수 있습니다.

관련 정보