Tôi có thể ngăn tuyến đường mặc định được thêm vào khi hiển thị giao diện không?


12

Tôi có một hệ thống với hai NIC trên đó. Máy này và một vài thiết bị đi kèm sẽ được di chuyển và gắn vào các mạng LAN khác nhau hoặc đôi khi nó sẽ sử dụng quay số.

    eth0:
    - 10.x.x.x address space
    - no internet gateway
    - only a few devices

eth1 (when used):
- 172.16.x.x or 192.168.x.x or other address spaces
- access to the gateway from LAN to internet

ppp0 (when used):
- internet access through dialup using KPPP

Tôi đang sử dụng ifconfig để đưa giao diện lên hoặc xuống (trừ ppp0, được xử lý bởi KPPP).

Nếu tôi đưa eth1 lên trước, nó sẽ nhận được địa chỉ từ DHCP của nó và nhận được cổng và được thêm vào định tuyến để không gặp sự cố khi truy cập mạng LAN và internet.

Nếu tôi đưa eth0 lên trước hoặc thứ hai, nó sẽ nhận được địa chỉ của nó và đặt cổng mặc định thành trong không gian địa chỉ của nó (trong phạm vi 10.xxx). Nếu tôi đưa eth0 lên trước và eth1 giây, cổng mặc định vẫn được giữ trong phạm vi 10.xxx.

Vì vậy, bất kể tôi làm gì, eth0 sẽ ghi đè eth1 và "yêu cầu" cổng trong định tuyến.

Có cách nào để ngăn eth0 yêu cầu cổng hoặc để đảm bảo eth1 (nếu được đưa lên thứ 2) sử dụng cổng của nó không? Hoặc bằng cách nào đó tôi có thể ưu tiên xếp hạng cổng nào của giao diện nào sẽ được sử dụng so với cổng khác?

Về cơ bản tôi muốn đảm bảo rằng cổng không gian địa chỉ mặc định của eth1 được sử dụng nếu nó hoạt động và nếu không, thì cổng mặc định của ppp0 được sử dụng. Tôi muốn có thể ngăn eth0 không có cổng mặc định.


Thật kỳ lạ khi sử dụng ifconfigsẽ gây ra bất kỳ loại tương tác DHCP nào. Thông thường ifupsẽ làm điều này, bằng cách bắt đầu dhclient. Các giao diện eth * của bạn có thể được đưa lên bởi quá trình khởi động hệ thống, giả sử /etc/init.d/network, hoặc bởi NetworkManager?
Đánh dấu Plotnick 4/2/2015

@MarkPlotnick: Đây là sau khi tôi đã khởi động và đang sử dụng "ifconfig eth1 up" (hoặc xuống hoặc eth0 ...). Tôi đoán hình thức đơn giản nhất của những gì tôi muốn làm là đưa eth0 lên mà không có bất kỳ tuyến đường nào được thêm vào ngoài không gian địa chỉ 10.xxx.
Tango

Câu trả lời:


5

Cấu hình máy chủ DHCP là sai. Nó không được gửi tùy chọn cổng mặc định khi không thể cung cấp định tuyến đến phần còn lại của thế giới. Nếu nó gửi tùy chọn đó thì bất kỳ máy khách nào cũng có thể cho rằng nó có thể gửi các gói cho bất kỳ đích ngoài liên kết nào đến cổng mặc định đã chỉ định.

Vì vậy, hộp của bạn là đúng khi sử dụng cổng mặc định từ eth0 nếu được DHCP thông báo như vậy. Giải pháp là loại bỏ tùy chọn xấu khỏi máy chủ DHCP của bạn.


Được rồi, điều đó rất có ý nghĩa. Thật không may, máy chủ DHCP là DLink DNS-321, không cho phép nhiều tùy chọn điều khiển. Nó dường như yêu cầu tôi bao gồm một cổng. Tôi sẽ phải xem liệu tôi có thể hack nó bằng cách nào đó và chỉnh sửa tập tin cấu hình. Nhưng, một vấn đề khác: Tại sao nó luôn lấy cổng từ máy chủ DHCP 10.xxx và không phải luôn lấy cổng từ máy chủ khác?
Tango

1
Tôi không chắc chắn cách linux chọn giữa các tuyến giống hệt nhau. Nó có thể dựa trên số liệu. Bạn có thể hiển thị bảng định tuyến của bạn khi bạn có nhiều tuyến mặc định?
Sander Steffann 4/2/2015

Nó sẽ không cho phép nhiều tuyến mặc định. Sự thất vọng là vì một số lý do, eth0 luôn lắng nghe DHCP và cập nhật cổng. Với eth1, nó chỉ lắng nghe và sử dụng cổng nếu đó là giao diện đầu tiên và duy nhất được bật lên. Nếu cổng của eth0 không luôn ghi đè lên eth1, thì tôi chỉ cần viết một tập lệnh để khi eth0 được đưa lên, eth1 đã bị gỡ xuống, sau đó được đưa lên.
Tango

Nó gần giống như sự kỳ lạ được mã hóa cứng trong máy khách DHCP. Cái nào bạn đang dùng? Cách khác: có thể dễ dàng hơn khi chỉ trao đổi eth0 và eth1;)
Sander Steffann

Đó là trên D-Link DNS-321. Nhưng tôi đã trải qua / var / log / syslog và tôi có thể thấy rằng DHCP cho eth1 cũng luôn gửi trong cổng. Tôi chỉ không thể hiểu tại sao eth1 luôn lấy cổng và thêm nó vào tuyến và eth1 thì không. Tôi sẽ thử giới hạn phạm vi cho DHCP eth0 sử dụng để bắt đầu ở 10.0.0.3 và sau đó làm cho eth0 tĩnh, sử dụng 10.0.0.2 và xem liệu điều đó có khiến nó bỏ qua máy chủ DHCP thô lỗ đó không.
Tango

16

Tôi đã gặp phải vấn đề tương tự trên Raspbian (tôi cho rằng giải pháp bên dưới cũng sẽ được áp dụng cho Debian). Raspberry Pi 3 có 2 NIC tích hợp: Wi-Fi và Ethernet. Tôi sử dụng cả hai, chúng lần lượt là wlan0 và eth0. wlan0 được kết nối với mạng Wi-Fi tại nhà của tôi và truy cập internet thông qua giao diện này. Nó nhận được các thiết lập thông qua DHCP từ bộ định tuyến nhà của tôi. eth0 được kết nối trực tiếp với PC Windows của tôi và được gán IP tĩnh . Không có quyền truy cập internet qua eth0 vì tôi không định cấu hình nó trên PC Windows.

Trong Raspbian, daemon dhcpcd chịu trách nhiệm cấu hình các giao diện mạng. Để đặt IP tĩnh thành giao diện eth0, có các dòng sau được thêm vào cuối /etc/dhcpcd.conf:

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1

Với cài đặt này, dhcpcd đã tạo 2 tuyến mặc định và tuyến qua eth0 có mức độ ưu tiên cao hơn so với wlan0:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.2.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

Vì vậy, tôi không có quyền truy cập internet, vì hệ thống đã cố định tuyến qua eth0 và nó không có quyền truy cập internet, như tôi đã đề cập ở trên.

Để giải quyết vấn đề, tôi đã sử dụng nogatewaytùy chọn trong /etc/dhcpcd.confgiao diện for eth0. Vì vậy, cấu hình dành riêng cho eth0 bắt đầu trông như thế:

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1
nogateway

Sau khi lưu cấu hình này và khởi động lại, không có tuyến mặc định qua eth0:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

Truy cập Internet xuất hiện, và vấn đề đã được giải quyết.


1
Đây chính xác là tình huống của tôi, và đây chính xác là giải pháp.
PNDA

Cảm ơn, nogatewaylà cách để đi trong các bản phát hành debian mới nhất
Alessandro Dionisi

Bạn không thể tưởng tượng được những rắc rối là gì khi đối mặt với vấn đề này trong Raspbian Pi, và bạn vừa đưa ra giải pháp thanh lịch và đúng đắn nhất. Cảm ơn bạn.
TechNyquist

7

Trên RHEL6 / Fedora 22, những điều sau đây đã được thử nghiệm.

Trong / etc / sysconfig / network-scripts / ifcfg-eth1 thêm dòng:

DEFROUTE=no

Thay thế eth1 bằng tên của giao diện nơi không muốn định tuyến mặc định.

Điều này cũng có thể được thực hiện thông qua GUI của Trình quản lý mạng bằng cách chọn hộp "Chỉ sử dụng kết nối này cho các tài nguyên trên mạng của nó" ở dưới cùng của tab IPv4.

DEFROUTE = không ngăn chặn việc thêm tuyến mặc định (đích 0.0.0.0) vào bảng định tuyến khi giao diện được bật. I E. mục sau đây sẽ không được thêm vào.

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.16.x.x      0.0.0.0         UG        0 0          0 eth1

1
Hãy giải thích tại sao nó khắc phục vấn đề. Và khi nó hoạt động. Nó sẽ hoạt động trên các distro dựa trên Debian (tôi tin) nhưng không hoạt động trên các distro với cách đặt tên giao diện khác nhau (hoặc distro sử dụng systemd cho mạng dịch vụ).
hóa học

1
Giống Red Hat hơn các hệ thống dựa trên Debian.
ilkkachu

4

ok, vì vậy những gì bạn muốn là cho máy không bao giờ đưa ra một cổng mặc định khi nó đưa eth0 và nhận địa chỉ của nó thông qua DHCP.

Đây là giải pháp:

Chỉnh sửa tập tin:

/etc/dhcp/dhclient-up-hooks

và cư trú với:

#!/bin/sh
## Prevent DHCP server on eth0 from forcing a default route on us

case ${interface} in
  eth0)
     printf "executing ip route delete default via $new_routers\n" 
     ip route delete default via $new_routers
  ;;
     *)
  ;;
esac

trước:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.4.1     0.0.0.0         UG    20     0        0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

sau ifdown eth0, ifup eth0:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

Điều này sẽ xóa tuyến đường với cổng sau khi được thiết lập, có nghĩa là nó đã xóa sạch mọi tuyến đường khác với một cổng mặc định. Hay tôi hiểu lầm?
Tango

nó sẽ xóa chỉ cổng mà máy khách DHCP đã tạo khi đưa lên eth0, nó sẽ không ảnh hưởng đến bất kỳ cổng nào khác đã có trên hệ thống. Từ mô tả của bạn, tôi cho rằng vấn đề của bạn là bạn sẽ nhận được hai cổng mặc định đồng thời tại một thời điểm (một trên eth0 và một trên eth1) và bạn cần loại bỏ một cho eth0 trước khi nó được đặt trên bảng định tuyến. Nếu bạn đăng đầu ra tuyến đường của bạn tại thời điểm xảy ra sự cố, tôi có thể thay đổi giả định của mình.
Ricardo

1

Bạn có thể chỉnh sửa tệp dhcpclient.conf và không yêu cầu bất kỳ tuyến mặc định nào từ máy chủ DHCP từ xa.

Một mẫu nhỏ về những gì tôi đã làm và nó đang hoạt động cho trường hợp của tôi

gửi tên máy chủ = "tên máy chủ ngẫu nhiên";

yêu cầu mặt nạ mạng con, địa chỉ quảng bá, thời gian bù, giao diện-mtu, rfc3442-classless-static-tuyến, ntp-server;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.