Вопрос или проблема
Вот моя схема:
ВМ > Unraid сервер > Роутер > Интернет
Когда я разрешаю DHCP, проблем нет. Когда переключаюсь на статический, я получаю полный доступ к локальной интрасети, но не к интернету. Вот несколько изображений, показывающих DHCP ifconfig
, ip a
, ip route
и ip neigh
.
DHCP
addohm@cdc:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:94:04:62 brd ff:ff:ff:ff:ff:ff
altname enp0s2
inet 192.168.1.198/24 metric 100 brd 192.168.1.255 scope global dynamic ens2
valid_lft 43110sec preferred_lft 43110sec
inet6 fe80::5054:ff:fe94:462/64 scope link
valid_lft forever preferred_lft forever
addohm@cdc:~$ ifconfig
ens2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.198 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::5054:ff:fe94:462 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:94:04:62 txqueuelen 1000 (Ethernet)
RX packets 114 bytes 8804 (8.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20 bytes 1988 (1.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 84 bytes 6352 (6.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 84 bytes 6352 (6.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
addohm@cdc:~$ ip route
default via 192.168.1.1 dev ens2 proto dhcp src 192.168.1.198 metric 100
192.168.1.0/24 dev ens2 proto kernel scope link src 192.168.1.198 metric 100
192.168.1.1 dev ens2 proto dhcp scope link src 192.168.1.198 metric 100
addohm@cdc:~$ ip neigh
192.168.1.1 dev ens2 lladdr 6c:99:61:d9:a6:ea STALE
addohm@cdc:~$ netstat nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 ens2
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens2
192.168.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 ens2
STATIC
addohm@cdc:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:94:04:62 brd ff:ff:ff:ff:ff:ff
altname enp0s2
inet 192.168.1.137/24 brd 192.168.1.255 scope global ens2
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe94:462/64 scope link
valid_lft forever preferred_lft forever
addohm@cdc:~$ ifconfig
ens2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.137 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::5054:ff:fe94:462 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:94:04:62 txqueuelen 1000 (Ethernet)
RX packets 632 bytes 54651 (54.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 766 bytes 64930 (64.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 865 bytes 69275 (69.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 865 bytes 69275 (69.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
addohm@cdc:~$ ip route
default via 192.168.1.254 dev ens2 proto static
192.168.1.0/24 dev ens2 proto kernel scope link src 192.168.1.137
addohm@cdc:~$ ip neigh
192.168.1.136 dev ens2 lladdr 1c:98:ec:0f:c4:30 REACHABLE
192.168.1.254 dev ens2 INCOMPLETE
addohm@cdc:~$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 ens2
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens2
Вот моя конфигурация (/etc/netplan/50-cloud-init.yaml):
network:
version: 2
ethernets:
ens2:
dhcp4: false
dhcp6: true
addresses:
- 192.168.1.137/24
routes:
- to: default
via: 192.168.1.254
nameservers:
addresses: [8.8.8.8,8.8.4.4]
Что я упускаю? Для меня все кажется одинаковым, но очевидно, что что-то препятствует доступу снаружи.
Вот ping к DNS серверам Google:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.1.137 icmp_seq=1 Destination Host Unreachable
From 192.168.1.137 icmp_seq=2 Destination Host Unreachable
From 192.168.1.137 icmp_seq=3 Destination Host Unreachable
From 192.168.1.137 icmp_seq=4 Destination Host Unreachable
Вот traceroute к DNS серверам Google:
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max
1 192.168.1.137 1407.485ms !H * 68.629ms !H
Несмотря на то, что dhcp сообщал мне, что шлюз был 192.168.1.254, когда я переключился на статический, он действительно использует 192.168.1.1.
Ответ или решение
Для решения проблемы отсутствия доступа в интернет при назначении статического IP-адреса, стоит внимательно изучить предоставленную конфигурацию и сравнить ее с конфигурацией, работающей через DHCP. Рассмотрим ситуацию более подробно.
Теория:
Когда вы используете DHCP, ваш роутер автоматически назначает IP-адрес, шлюз по умолчанию и DNS-сервер. Обычно это обеспечивает беспроблемное подключение к сети и интернету, так как DHCP-сервер предоставляет все необходимые для этого параметры. Ситуация меняется, когда вы переключаетесь на статическую конфигурацию, потому что теперь вы сами должны правильно указать все эти параметры.
Основными компонентами настройки сети, влияющими на доступ к интернету, являются:
-
IP-адрес и маска подсети: Указывают, какой адрес в вашей локальной сети будет принадлежать вашему устройству и какие адреса могут считаться находящимися в той же сети.
-
Шлюз по умолчанию: Это устройство, через которое ваш трафик будет отправляться в внешние сети, такие как интернет.
-
DNS-серверы: Используются для разрешения доменных имен в IP-адреса, что нужно, чтобы сайты могли быть найдены в сети.
Если любые из этих параметров заданы неправильно, это может привести к проблемам с подключением, в том числе к отсутствию доступа к интернету.
Пример (анализ технических данных):
Из предоставленного вами вывода команд ip a
, ip route
и `ip neigh можно сделать несколько важных выводов.
При использовании DHCP:
- IP-адрес: 192.168.1.198
- Шлюз по умолчанию: 192.168.1.1
При использовании статического IP:
- IP-адрес: 192.168.1.137
- Шлюз по умолчанию: 192.168.1.254 (что ошибочно, как вы сами отметили)
Ошибка заключается в неправильном указании шлюза по умолчанию. Правильным шлюзом, вероятно, является 192.168.1.1, так как DHCP выделял именно его.
Конфигурация /etc/netplan/50-cloud-init.yaml
, которую вы задали для статической настройки, содержит строку:
routes:
- to: default
via: 192.168.1.254
Это неверно, если ваш DHCP-конфиг указывает на 192.168.1.1 как на правильный шлюз.
Кроме того, команда ip neigh
показывает, что связь с 192.168.1.254 является INCOMPLETE
, что очень вероятно указывает на недоступность этого адреса в вашей сети.
Применение (исправление конфигурации):
Для решения проблемы, вам нужно откорректировать конфигурационный файл 50-cloud-init.yaml
, чтобы он использовал правильный шлюз. Следует заменить строку:
via: 192.168.1.254
на:
via: 192.168.1.1
После этого примените изменения с помощью команды:
sudo netplan apply
Дополнительно убедитесь, что ваш файл конфигурации содержит корректные записи DNS-серверов. В вашем случае это:
nameservers:
addresses: [8.8.8.8,8.8.4.4]
Эти адреса соответствуют публичным DNS-серверам Google и, как правило, работают безотказно.
Заключение:
После корректировки конфигурации (замены шлюза) и применения изменений ваша система должна получить доступ к интернету даже при использовании статического IP-адреса. Если проблема продолжает сохраняться, убедитесь, что роутер действительно использует 192.168.1.1 как шлюз, проверив его настройки, и что других конфликтов с IP-адресами в вашей сети нет.