แยกการรับส่งข้อมูลเครือข่ายบนสองอินเทอร์เฟซเครือข่าย


11

คุณสามารถให้ความรู้ความเชี่ยวชาญในการทำความเข้าใจเกี่ยวกับการกำหนดค่าการแยกการรับส่งข้อมูลเครือข่ายในสองอินเตอร์เฟสเครือข่ายได้หรือไม่?

ดังที่ฉันทราบแล้วว่าเส้นทางแบบสแตติกใช้สำหรับการรับส่งข้อมูลเครือข่ายที่ไม่ได้ออกแบบมาเพื่อใช้เกตเวย์เริ่มต้น เกตเวย์เริ่มต้นจะใช้สำหรับการรับส่งข้อมูลทั้งหมดที่ไม่ได้กำหนดไว้สำหรับเครือข่ายท้องถิ่นและไม่มีเส้นทางที่ต้องการได้รับการระบุไว้ในตารางเส้นทาง

สถานการณ์มีดังนี้

  • คอมพิวเตอร์แต่ละเครื่องในเครือข่ายมีการ์ดเครือข่ายสองใบ
  • อินเทอร์เฟซการผลิตสำหรับแต่ละคือ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

ถ้าฉัน ping จาก Host 50 ( ifconfigผลลัพธ์เดียวกัน- เป็น quad อื่นสุดท้าย) ก็eth0จะเงียบและฉันเห็น ICMP echos เปิดeth1ตามที่คาดไว้

ฉันต้องการที่จะเข้าใจวิธีการกำหนดค่าแต่ละอินเตอร์เฟสเพื่อรองรับปริมาณการใช้งานที่รับผิดชอบใน Linux สองสายพันธุ์หลักเท่านั้น ฉันคิดว่าฉันเกือบจะอยู่ที่นั่น แต่ฉันคิดถึงบางสิ่งที่ฉันไม่สามารถหาได้

  • Debian Wheezy (7.x) หรือ Debian Jessie (8.x)
  • Enterprise Linux (6.x) (RedHat / CentOS / วิทยาศาสตร์ / Oracle)

ฉันรู้ว่าวิธีแก้ปัญหาสำหรับ Debian น่าจะดีสำหรับทั้ง Wheezy และ Jessie และวิธีแก้ปัญหาสำหรับ EL ควรเหมือนกันสำหรับรุ่น EL 6.x ทั้งหมด ฉันต้องการหลีกเลี่ยงการใช้สคริปต์ RC เพื่อดำเนินการคำสั่งโดยเลือกใช้ไฟล์การกำหนดค่าแทน

ใน Debian ไฟล์การกำหนดค่าที่เกี่ยวข้องที่ฉันรู้คือ:

  • /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

ไฟล์ Debian 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

ตรวจสอบiptabels -L -t nat
PersianGulf

คำตอบ:


7

ฉันชอบที่จะรู้เพิ่มเติมเกี่ยวกับหัวข้อนี้เพื่อปรับแต่งการกำหนดค่าให้ดีที่สุดเท่าที่จะเป็นไปได้ แต่นี่คือสิ่งที่ฉันมีจนถึงตอนนี้ แม้ว่าจะไม่ได้เปิดใช้งานการกรอง ARP ในอินเทอร์เฟซเครือข่ายทั้งหมด ( net.ipv4.conf.all.arp_filter = 0) ตามที่ระบุไว้โดย @spuk ดูเหมือนว่าการรับส่งข้อมูลจะแยกออกจากกันอย่างสมบูรณ์ในการกำหนดค่านี้

ไฟล์, /etc/iproute2/rt_tablesเป็นไฟล์เดียวกันใน EL 6.x และ DEB 7/8 อย่างน้อย นี่คือไฟล์ที่สร้างตารางเส้นทางที่มีชื่อสำหรับเส้นทางคงที่

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
1 mgmt

ด้านบนจำนวนของเส้นทางที่มีชื่อคงที่ 1 เป็นหลักโดยพลการ หรือแต่ละเส้นทางคงที่จะได้รับหมายเลขเฉพาะระหว่าง 1 ถึง 252

ไฟล์/etc/network/interfacesใน DEB 7/8 อย่างน้อย:

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บน Debian:

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

/etc/sysconfig/networkไฟล์EL 6.x :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

ด้านบน GATEWAY เป็นเส้นทางเริ่มต้น ด้านล่างนี้ถูกตั้งค่า BOOTPROTOCOL เป็น DHCP เส้นทางเริ่มต้นจะได้รับจาก DHCP

/etc/sysconfig/network-scripts/ifcfg-eth0ไฟล์EL 6.x ที่ไม่มี "HWADDR" และ "UUID":

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

/etc/sysconfig/network-scripts/ifcfg-eth1ไฟล์EL 6.x ที่ไม่มี "HWADDR" และ "UUID":

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

/etc/sysconfig/network-scripts/route-eth1ไฟล์EL 6.x :

192.168.100.0/24 dev eth1 table mgmt
default via 192.168.100.1 dev eth1 table mgmt

/etc/sysconfig/network-scripts/rule-eth1ไฟล์EL 6.x :

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
169.254.0.0/16 dev eth0  scope link  metric 1002
169.254.0.0/16 dev eth1  scope link  metric 1003
default via 10.10.10.1 dev eth0

4

ฉันยังไม่ได้อ่านโพสต์ทั้งหมดของคุณ (ขออภัยไม่สามารถใช้เวลาได้จริงๆในตอนนี้) แต่ฉันเชื่อว่าอาจเกี่ยวข้องกับวิธีที่ Linux ใช้โมเดลโฮสต์ IP :

... การใช้งาน IPv4 ใน Linux เป็นค่าเริ่มต้นสำหรับโมเดลโฮสต์ที่อ่อนแอ ...

จากหน้าเดียวกันนั้น:

... หาก IP สแต็กถูกนำไปใช้กับโมเดลโฮสต์ที่ไม่รัดกุมก็จะยอมรับแพ็กเก็ตปลายทางใด ๆ ในเครื่องโดยไม่คำนึงถึงเน็ตเวิร์กอินเตอร์เฟสที่ได้รับแพ็กเก็ต ...

นั่นคือใน Linux ตามค่าเริ่มต้นที่อยู่ IP "เป็นของโฮสต์" ไม่ใช่อย่างเคร่งครัด "กับอินเตอร์เฟส" คุณสามารถเปลี่ยนพฤติกรรมที่ผ่านarp_filter, rp_filter, arp_announce, arp_ignoresysctls (ได้จากLVS การ ARP ปัญหาที่เห็นที่นี่ ) ดูที่ip-sysctl.txtด้วย


บทความนี้ทำงานได้ดีสำหรับฉัน: sivel.net/2006/12/linux-multi-homing
Richard Gomes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.