전문 지식을 활용하여 두 네트워크 인터페이스에서 네트워크 트래픽 분리를 구성하는 방법을 이해할 수 있습니까?
내가 아는 한, 지금까지는 기본 게이트웨이를 사용하도록 설계되지 않은 네트워크 트래픽에 대해 고정 경로가 사용되었습니다. 기본 게이트웨이는 로컬 네트워크로 향하지 않고 라우팅 테이블에 기본 경로가 지정되지 않은 모든 트래픽에 사용됩니다.
시나리오는 다음과 같습니다.
- 네트워크의 각 컴퓨터에는 두 개의 네트워크 카드가 있습니다.
- 각각의 프로덕션 인터페이스는
eth0
(GW = 10.10.10.1)입니다. - 각각에 대한 관리 인터페이스는
eth1
(GW=192.168.100.1)입니다. - 생산 및 관리 트래픽은 완전히 분리되어야 합니다.
나는 Debian Wheezy에서 시도한 것을 아래에 게시했습니다. 그리고 내 문제는 두 인터페이스 모두에서 통신하도록 호스트를 설정했지만 개별 호스트가 잘못된 인터페이스의 트래픽을 "듣는" 것처럼 보인다는 것입니다. 예를 들어:
호스트 140
eth0 Link encap:Ethernet HWaddr 08:00:27:d1:b6:8f
inet addr:10.10.10.140 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fed1:b68f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1341 errors:0 dropped:0 overruns:0 frame:0
TX packets:2530 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:641481 (626.4 KiB) TX bytes:241124 (235.4 KiB)
eth1 Link encap:Ethernet HWaddr 08:00:27:ad:14:b6
inet addr:192.168.100.140 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fead:14b6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7220 errors:0 dropped:0 overruns:0 frame:0
TX packets:5257 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:602485 (588.3 KiB) TX bytes:1022906 (998.9 KiB)
호스트 140에서 다음 명령을 실행합니다 tcpdump -i eth0
. 호스트 140의 별도 세션에서 ping 192.168.100.50
.
19:17:29.301565 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 10, length 64
19:17:30.301561 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 11, length 64
19:17:31.301570 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 12, length 64
19:17:32.301580 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 13, length 64
위의 출력이 에서 표시되는 이유는 무엇입니까 eth0
? 10.10.10.140의 트래픽만 볼 수 있어야 할 것 같습니다. 예상대로 다음에서도 이 내용을 봤습니다 eth1
.
19:18:47.805408 IP 192.168.100.50 > 192.168.100.140: ICMP echo request, id 1605, seq 247, length 64
호스트 50에서 ping을 실행하면( ifconfig
동일한 결과 - 마지막 쿼드만 다름) 예상대로 eth0
조용하고 ICMP echo 가 표시됩니다 eth1
.
두 가지 주요 Linux 버전 모두에서 담당하는 트래픽만 처리하도록 각 인터페이스를 구성하는 방법을 알고 싶습니다. 거의 다 온 것 같은데 찾을 수 없는 뭔가가 빠졌네요.
- Debian Wheezy(7.x) 또는 Debian Jessie(8.x)
- 엔터프라이즈 Linux(6.x)(RedHat/CentOS/Scientific/Oracle).
나는 Debian 솔루션이 Wheezy와 Jessie 모두에게 적합해야 하며 EL 솔루션이 모든 EL 6.x 버전에서 동일해야 한다는 것을 알고 있습니다. 명령을 실행하기 위해 RC 스크립트를 사용하는 것을 피하고 대신 구성 파일을 사용하고 싶습니다.
데비안에서 내가 아는 관련 구성 파일은 다음과 같습니다.
/etc/network/interfaces
EL 6.x에서 내가 아는 관련 구성 파일은 다음과 같습니다.
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/route-eth0
/etc/sysconfig/network-scripts/route-eth1
/etc/sysconfig/network-scripts/rule-eth0
/etc/sysconfig/network-scripts/rule-eth1
내 데비안 8 "Jessie" /etc/network/interfaces
파일:
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# Production interface
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 10.10.10.140
netmask 255.255.255.0
gateway 10.10.10.1
# Management interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.100.140
netmask 255.255.255.0
netstat -anr
나는 이것이 문제를 설명할 수 있다고 생각합니다 .
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.10.10.1 0.0.0.0 UG 0 0 0 eth0
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
답변1
구성을 최적의 구성으로 최적화하기 위해 이 주제에 대해 더 자세히 알아보고 싶지만 이것이 지금까지의 내용입니다. @spuk가 언급했듯이 모든 네트워크 인터페이스( )에서 ARP 필터링을 활성화하지 않아도 net.ipv4.conf.all.arp_filter = 0
이 구성에서는 트래픽이 완전히 분리되는 것처럼 보입니다.
/etc/iproute2/rt_tables
적어도 EL 6.x와 DEB 7/8에서는 파일이 동일합니다. 이는 정적 경로에 대한 명명된 라우팅 테이블을 생성하는 파일입니다.
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
252 mgmt
위에서 명명된 고정 경로의 수인 252는 본질적으로 임의적입니다. 또는 각 고정 경로에는 고유한 번호(1에서 252 사이)가 있습니다.
DEB 7/8의 파일에는 /etc/network/interfaces
최소한 다음이 포함됩니다.
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The production network interface
# The 'gateway' directive is the default route.
# Were eth0 configured via DHCP, the default route would also be here.
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 10.10.10.140
netmask 255.255.255.0
gateway 10.10.10.1
# The management network interface
# The 'gateway' directive cannot be used again because there can be
# one, and only one, default route. Instead, the 'post-up' directives
# use the `mgmt` static route.
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.100.140
netmask 255.255.255.0
post-up ip route add 192.168.100.0/24 dev eth1 src 192.168.100.140 table mgmt
post-up ip route add default via 192.168.100.1 dev eth1 table mgmt
post-up ip rule add from 192.168.100.140/32 table mgmt
post-up ip rule add to 192.168.100.140/32 table mgmt
ip route show
데비안에서의 결과:
default via 10.10.10.1 dev eth0
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.140
192.168.100.0/24 dev eth1 proto kernel scope link src 192.168.100.140
EL 6.x /etc/sysconfig/network
파일:
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1
위에서는 GATEWAY가 기본 경로입니다. 다음으로 BOOTPROTOCOL이 DHCP로 설정된 경우 기본 경로는 DHCP에서 가져옵니다.
"HWADDR" 및 "UUID"가 없는 EL 6.x /etc/sysconfig/network-scripts/ifcfg-eth0
파일:
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=10.10.10.140
NETMASK=255.255.255.0
NETWORK=10.10.10.0
BROADCAST=10.10.10.255
"HWADDR" 및 "UUID"가 없는 EL 6.x /etc/sysconfig/network-scripts/ifcfg-eth1
파일:
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=192.168.100.140
NETMASK=255.255.255.0
NETWORK=192.168.100.0
BROADCAST=192.168.100.255
EL 6.x /etc/sysconfig/network-scripts/route-eth1
파일:
192.168.100.0/24 dev eth1 table mgmt
default via 192.168.100.1 dev eth1 table mgmt
EL 6.x /etc/sysconfig/network-scripts/rule-eth1
파일:
from 192.168.100.0/24 lookup mgmt
ip route show
EL 6.x의 결과:
192.168.100.0/24 dev eth1 proto kernel scope link src 192.168.100.160
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.160
default via 10.10.10.1 dev eth0
RHEL8 업데이트
위 방법은 RHEL 6, RHEL 7 및 그 파생 버전에 적합하지만, RHEL 8 및 그 파생 버전의 경우 network-scripts
위 방법을 사용하기 전에 먼저 설치해야 합니다.
dnf install network-scripts
network-scripts
설치 시 RHEL의 다음 주요 버전 중 하나에서 제거될 경고가 생성되며 NetworkManager는 ifup
/ ifdown
스크립트도 제공합니다.
우분투 20.04 LTS 업데이트
명명된 경로 테이블을 생성하는 것은 괜찮지만 사용할 필요는 없으며 netplan
어쨌든 이름을 사용하지 않습니다. 그럼에도 불구하고 파일에 지정된 라우팅 테이블 번호는 rt_tables
계속 사용할 수 있습니다 netplan
. 해당 네트워크 카드는 enps03
( eth0
) 및 enp0s8
( eth1
)입니다.
network:
version: 2
ethernets:
enp0s3:
addresses:
- 10.10.10.140/24
dhcp4: false
dhcp6: false
gateway4: 10.10.10.1
nameservers:
addresses:
- 1.2.3.4
- 1.2.3.5
search:
- your-search-domain-name.com
enp0s8:
dhcp4: false
dhcp6: false
addresses:
- 192.168.100.140/24
routes:
- to: 192.168.100.0/24
via: 192.168.100.1
table: 252
routing-policy:
- from: 192.168.100.0/24
table: 252
그러면 에서 다음 경로가 생성됩니다 ip r s
.
default via 10.10.10.1 dev enp0s3 proto static
10.10.10.0/24 dev enp0s3 proto kernel scope link src 10.10.10.140
192.168.100.0/24 dev enp0s8 proto kernel scope link src 192.168.100.140
답변2
귀하의 게시물을 모두 읽지는 않았지만(죄송합니다. 지금은 쓸 시간이 없습니다) Linux가 구현되는 방식과 관련이 있을 수 있다고 생각합니다.IP 호스트 모델:
... Linux의 IPv4 구현은 기본적으로 약한 호스트 모델을 사용합니다. ...
같은 페이지에서:
...IP 스택이 약한 호스트 모델을 사용하여 구현되면 패킷이 수신된 네트워크 인터페이스에 관계없이 모든 로컬 대상에 대한 패킷을 허용합니다. ...
즉, Linux에서는 기본적으로 IP 주소가 엄격하게 "인터페이스에 속한다"기보다는 "호스트에 속합니다". arp_filter
, rp_filter
, arp_announce
, sysctls를 통해 arp_ignore
이 동작을 변경할 수 있습니다 (LVS: ARP 문제, 본여기). 또한보십시오IP-sysctl.txt.