Như đã được đề cập trong các câu trả lời trước, một giải pháp cho vấn đề này là thêm bộ điều hợp mạng macvlan trên máy chủ. Tuy nhiên, tôi cảm thấy rằng việc tua lại thủ công các tuyến đến bộ điều hợp macvlan là hơi khó, đặc biệt là vì tôi muốn hỗ trợ IPv6 và đặt tuyến theo cách thủ công có thể trở thành vấn đề khi tiền tố thay đổi. Vì vậy, đây là cấu hình của tôi để hạt nhân kiểm soát bảng định tuyến:
(Cấu hình cụ thể ở đây là Debian và Upstart cụ thể, nhưng các bước cơ bản sẽ hoạt động trên mọi GNU / Linux.)
Tạo bộ điều hợp macvlan khi khởi động
Đầu tiên, bạn cần chọn một địa chỉ MAC cho bộ điều hợp của bạn. Bạn có thể chỉ cần sử dụng một cái ngẫu nhiên, nhưng tôi khuyên bạn nên tự tạo bộ điều hợp macvlan và sử dụng MAC của nó. Theo cách này, MAC bắt buộc phải có bất kỳ quy ước nào có thể có ở đó.
Nên cài đặt MAC cố định, vì nếu không thì không có cách nào để máy chủ DHCP nhận ra máy của bạn sau khi khởi động lại và gán cho nó cùng một địa chỉ IP như trước.
Vì vậy, tạo một bộ chuyển đổi và tìm kiếm MAC:
root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...
Số thập lục phân được tô sáng là địa chỉ MAC của bạn.
Bây giờ bạn tạo một tập lệnh init - phải được chạy trước khi kết nối mạng - để tạo bộ điều hợp macvlan mỗi lần khởi động. Lệnh để làm điều này là:
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
Một ví dụ Upstart init script cho mục đích này sẽ là:
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
Chỉ cần đặt điều này trong ví dụ /etc/init/macvlan.conf
.
Thiết lập cấu hình mạng
Trong /etc/network/interfaces
, đặt bộ điều hợp mạng vật lý của bạn thành thủ công (nhưng để tự động) và di chuyển cấu hình trước đó (thường là DHCP hoặc địa chỉ IP tĩnh) sang bộ điều hợp macvlan của bạn. Ví dụ:
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
Vô hiệu hóa IPv6 cho bộ điều hợp vật lý
Cuối cùng, bạn không muốn bộ điều hợp vật lý có được địa chỉ IP. Đối với IPv4, cài đặt bộ điều hợp thành thủ công sẽ ngăn không cho nó lấy địa chỉ. Tuy nhiên, tôi không tìm thấy cấu hình nào ngăn nhân lấy / gán địa chỉ IPv6 cho / cho bộ điều hợp. Khi đó, nó cũng thêm các tuyến đường cho họ, có thể gây ra vấn đề. Vì vậy, cách tốt nhất dường như là vô hiệu hóa IPv6 cho bộ điều hợp vật lý. Bạn có thể làm điều này bằng cách thêm dòng
net.ipv6.conf.eth0.disable_ipv6=1
đến /etc/sysctl.conf
, bằng cách tạo một tệp trong /etc/sysctl.d/
dòng này hoặc bằng cách thêm
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
đến tập lệnh init của bạn.
Khi bạn khởi động lại máy, giao tiếp từ máy chủ đến khách sẽ hoạt động với cả IPv4 và IPv6.
Xin lưu ý rằng nếu bạn mắc lỗi trong khi thiết lập điều này, máy chủ của bạn có thể không truy cập được qua mạng ngay cả sau khi khởi động lại. Chỉ làm điều này nếu bạn có quyền truy cập vật lý vào máy hoặc các biện pháp bảo vệ khác để bạn có thể khắc phục các sự cố tiềm ẩn.