Cấu hình mạng máy ảo cho chế độ định tuyến trên các máy chủ Hetzner, OVH và Online.net là phản trực giác vì bạn có các mạng giống như thế này:
Host IP: 192.168.0.2
Host Netmask: 255.255.255.0 (/24)
Host Gateway: 192.168.0.1
Guest IP: 10.0.0.1
Guest Netmask: 255.255.255.255 (/32)
Guest Gateway: 192.168.0.1
Guest MAC: 02:00:00:01:02:03
Ví dụ trên chỉ là một minh họa, không phải là địa chỉ IP mẫu mà bạn có thể mong đợi từ bất kỳ nhà cung cấp dịch vụ lưu trữ nào đã nói ở trên.
Huh? Gì? Làm thế nào bạn có thể có một mạng con chỉ một địa chỉ IP ( 10.0.0.1/32
)? Không có chỗ cho một cổng! Tại sao cổng trên một mạng con rất khác nhau ( 192.168.0.0/24
)?
Đây là những câu hỏi khiến Linux và Windows thất bại trong việc kiểm tra độ tỉnh của mạng, vì các mạng không có ý nghĩa gì với chúng. Họ nghĩ rằng cổng sẽ không thể truy cập được.
Hetzner, OVH và Online.net sử dụng một số mánh khóe mạng để làm cho cổng có thể truy cập được.
May mắn thay, trên cả Linux và Windows, bạn có thể ghi đè kiểm tra độ tỉnh táo và đặt cấu hình giao diện ở trên.
Phương pháp khả thi
Địa chỉ tĩnh
Đây là cách dễ nhất để làm. Cấu hình nhất bạn cần làm trên máy chủ là tạo một cây cầu.
Chủ nhà
Trên Debian / Ubuntu , nếu giao diện quản lý / Internet của bạn là eth0
, bạn có thể chỉnh sửa /etc/network/interfaces
để có một cây cầu br0
như vậy
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.0.2 # Host IP
netmask 255.255.255.0 # Host Netmask
gateway 192.168.0.1 # Host Gateway
metric 0
bridge_ports eth0
bridge_stp on
bridge_fd 0
bridge_maxwait 0
Chạy sudo service networking restart
để làm cho cấu hình mạng cầu nối có hiệu lực.
Trên RĂNG / CentOS , nếu giao diện quản lý / Internet của bạn là eth0
, bạn có thể chỉnh sửa /etc/sysconfig/network-scripts/ifcfg-eth0
sử dụng cầu br0
như vậy
TYPE="Ethernet"
BOOTPROTO="none"
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
BRIDGE="br0"
Sau đó tạo một tệp mới /etc/sysconfig/network-scripts/ifcfg-br0
để cấu hình cầu:
DEVICE="br0"
BOOTPROTO="static"
IPADDR="192.168.0.2" # Host IP
NETMASK="255.255.255.0" # Host Netmask
GATEWAY="192.168.0.1" # Host Gateway
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
Chạy sudo service network restart
để làm cho cấu hình mạng cầu nối có hiệu lực.
Nếu bạn vẫn kết nối với máy chủ của mình, xin chúc mừng, bạn đã có một cây cầu hoạt động!
Hypervisor
Về tinh khiết Xen xl (libxenlight), đây là tất cả những gì bạn cần viết cho cấu hình giao diện ảo:
vif=[ 'mac=02:00:00:01:02:03,bridge=br0' ]
Lưu ý rằng 02:00:00:01:02:03
là địa chỉ MAC mà Hetzner, OVH hoặc Online.net đã cung cấp cho bạn cho mạng khách và br0
là cây cầu mà chúng ta vừa cấu hình ở trên.
Nếu bạn đang sử dụng sinh nhật , bên trong <devices>
gắn thẻ, thêm giao diện này:
<interface type='bridge'>
<mac address='02:00:00:01:02:03'/>
<source bridge='br0'/>
</interface>
Khi bạn đã cấu hình giao diện ảo này với đúng địa chỉ MAC và cầu nối, hãy khởi động máy khách của bạn và kết nối với bảng điều khiển của nó ( xl console domU
, virsh console domU
hoặc đính kèm với phiên VNC của khách, nếu có).
Khách
Đây là phần xấu xí. Nó thay đổi tùy theo hệ điều hành về cách ghi đè kiểm tra độ vệ sinh mạng. Tôi sẽ che Debian / Ubuntu , RĂNG / CentOS và Microsoft Windows NT .
Trên Debian / Ubuntu , nếu giao diện được gọi eth0
, viết cái này vào /etc/network/interfaces
:
auto eth0
iface eth0 inet static
address 10.0.0.1 # Guest IP
broadcast 10.0.0.1 # Guest IP
netmask 255.255.255.255
gateway 192.168.0.1 # Guest Gateway, a.k.a. Host Gateway
post-up route add 192.168.0.1 dev eth0
post-up route add default gw 192.168.0.1
pre-down route del 192.168.0.1 dev eth0
pre-down route del default gw 192.168.0.1
Các post-up
và post-down
Các lệnh iproute2 báo cho hệ điều hành dù sao cũng áp dụng cổng, mặc dù nó trên một mạng con khác.
Sau khi chạy sudo service networking restart
, bây giờ bạn có thể tiếp cận khách của mình thông qua IP khách 10.0.0.1
.
Trên RĂNG / CentOS , nếu giao diện được gọi eth0
, viết cái này vào /etc/sysconfig/network-scripts/ifcfg-eth0
:
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
USERCTL="no"
PEERDNS="yes"
TYPE="Ethernet"
NETMASK="255.255.255.255"
IPADDR="10.0.0.1" # Guest IP
GATEWAY="192.168.0.1" # Guest Gateway, a.k.a. Host Gateway
ARP="yes"
HWADDR="02:00:00:01:02:03" # Guest MAC
Sau đó, viết như sau vào /etc/sysconfig/network-scripts/route-eth0
:
192.168.0.1 dev eth0
default via 192.168.0.1 dev eth0
Tệp này báo cho iproute2 dù sao cũng áp dụng cổng, mặc dù trên mạng con khác.
Sau khi chạy sudo service network restart
, bây giờ bạn có thể tiếp cận khách của mình thông qua IP khách 10.0.0.1
.
Trên Microsoft Windows NT , đi đến Kết nối mạng trong Bảng điều khiển, nhấp chuột phải vào giao diện và nhấp vào "Thuộc tính". Trong tab "Kết nối mạng", chọn "Giao thức Internet Phiên bản 4 (TCP / IPv4)", sau đó nhấp vào "Thuộc tính". Điền vào các trường như được hiển thị:
Khi bạn nhấp vào "OK", bạn sẽ nhận được cảnh báo này:
Nhấp vào "OK" để xác nhận rằng bạn muốn sử dụng cổng nào.
Sau vài giây, bạn sẽ có thể tiếp cận khách của mình thông qua IP khách 10.0.0.1
.
Địa chỉ động DHCP
Thật không may, điều này là không thể. Không có máy chủ DHCP sẽ chỉ định bạn 10.0.0.1/32
và cho bạn biết cổng là 192.168.0.1
, ngay cả khi bạn bằng cách nào đó đã chặn DHCPDISCOVER của khách. Và không có máy khách DHCP nào chấp nhận cấu hình kỳ quái này.
Bạn cần một mạng có cấu trúc đúng với một cổng bên trong mạng con của bạn để thiết lập DHCP. Cách duy nhất để làm điều này là tạo một mạng riêng ( 172.16.0.0/12
) và thực hiện dịch địa chỉ mạng giữa địa chỉ IP riêng của khách của bạn ( 172.16.0.2
) và địa chỉ IP công cộng của nó ( 10.0.0.1
) qua cổng ( 172.16.0.1
).
Mạng riêng và NAT
Mặc dù tôi đã xác minh tất cả các bước trên, tôi chưa bao giờ tạo thành công một-một / cơ bản NAT từ IP riêng sang IP công cộng. Một phần lý do là có rất nhiều việc phải làm để xây dựng mạng lưới.
Mạng của bạn có thể trông như thế này:
Guest Public IP: 10.0.0.1
Guest Private IP: 172.16.0.2
Guest Netmask: 255.240.0.0 (/12)
Guest Gateway: 172.16.0.1
Sau đó, máy chủ sẽ chuyển tiếp lưu lượng giữa IP Công cộng của Khách 10.0.0.1
và IP cá nhân của khách 172.16.0.2
qua Cổng khách 172.16.0.1
.
OpenStack (mà hỗ trợ Xen qua libvirt ) có khả năng cung cấp thiết lập NAT này cũng như máy chủ DHCP mạng con riêng thông qua sự trừu tượng hóa mạng của nó, OpenStack neutron , nhưng tự thiết lập OpenStack khá rắc rối.
Tôi đã có thể nhận cài đặt OpenStack một nút và mạng riêng neutron chạy cho các phiên bản / khách / máy chủ Nova, nhưng tôi không thể tìm ra cách NAT các địa chỉ IP riêng ( 172.16.0.0/12
) đến địa chỉ IP mạng bên ngoài ( 10.0.0.1/32
, 10.0.0.2/32
, v.v.) vì OpenStack không hỗ trợ cấu trúc mạng bất thường của Hetzner, OVH và Online.net cho các máy ảo bên ngoài. Đây vẫn là một vấn đề chưa được giải quyết.
Tài nguyên bổ sung