Я изо всех сил пытался настроить свою машину Ubuntu как простой маршрутизатор с двумя сетевыми адаптерами с NAT, пытаясь придерживаться самых последних рекомендуемых методов, а именно netplan
для сетевых адаптеров и ufw
для межсетевого экрана и для iptables. Мне, наконец, удалось получить его маршрутизацию, но я не могу понять, почему при загрузке система назначает локальный адрес канала (169.254.xx) моему сетевому адаптеру LAN в дополнение к статическому IP-адресу, как если бы он делал Запрос DHCP и не получил ответа. После применения sudo netplan
адрес 169.254.x.x пропадает.
Я не уверен, что это вызывает какие-либо проблемы в моей сети, но я этого не понимаю и меня это беспокоит :-). Любые подсказки приветствуются!
Вот моя сетевая топология:
ISP router Ubuntu router Win10 Client
[ ] [ wan1 lan1 ] [ ]
[192.168.1.1]---[192.168.1.8 192.168.9.1]---[192.168.9.10 ]
[ ] [ (169.254.x.x)] [ (static) ]
[ ] [(dhcp) (static)] [ ]
В настоящее время я не настраивал ни DHCP-сервер, ни DNS-демон на машине Ubuntu (я собираюсь сделать это в ближайшее время).
Обратите внимание, что этот компьютер был установлен как рабочий стол Ubuntu (сейчас я сожалею) и что я включил systemd-networkd и отключил NetworkManager с помощью systemctl unmask / enable / start systemd-networkd
и systemctl остановить / отключить / замаскировать NetworkManager
.
После перезагрузки lan1
назначается 169.254.x.x
адрес:
> ~ 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
valid_lft forever preferred_lft forever
2: lan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 50:3e:aa:12:aa:cb brd ff:ff:ff:ff:ff:ff
inet 192.168.9.1/24 brd 192.168.9.255 scope global lan1
valid_lft forever preferred_lft forever
inet 169.254.232.216/16 brd 169.254.255.255 scope global noprefixroute lan1
valid_lft forever preferred_lft forever
inet6 fe80::523e:aaff:fe12:aacb/64 scope link
valid_lft forever preferred_lft forever
3: wan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether e0:69:95:e4:d5:e8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.8/24 brd 192.168.1.255 scope global dynamic wan1
valid_lft 86239sec preferred_lft 86239sec
inet6 fe80::e269:95ff:fee4:d5e8/64 scope link
valid_lft forever preferred_lft forever
> ~ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 203 0 0 wan1
169.254.0.0 0.0.0.0 255.255.0.0 U 202 0 0 lan1
192.168.1.0 0.0.0.0 255.255.255.0 U 203 0 0 wan1
192.168.1.1 0.0.0.0 255.255.255.255 UH 100 0 0 wan1
192.168.9.0 0.0.0.0 255.255.255.0 U 0 0 0 lan1
После повторного применения netplan вручную с помощью sudo netplan apply
адрес 169.254.x.x
пропал.
> ~ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 203 0 0 wan1
192.168.1.0 0.0.0.0 255.255.255.0 U 203 0 0 wan1
192.168.1.1 0.0.0.0 255.255.255.255 UH 100 0 0 wan1
192.168.9.0 0.0.0.0 255.255.255.0 U 0 0 0 lan1
Некоторые подробности о моей настройке:
/etc/netplan/01-router-all.yaml
network:
version: 2
renderer: networkd
ethernets:
wan1:
match:
macaddress: "e0:69:95:e4:d5:e8"
set-name: wan1
dhcp4: true
accept-ra: false
lan1:
match:
macaddress: "50:3e:aa:12:aa:cb"
set-name: lan1
dhcp4: false
dhcp6: false
addresses: [192.168.9.1/24]
nameservers:
addresses: [9.9.9.9, 1.1.1.1]
search: []
optional: true
accept-ra: false
/etc/ufw/before.rules
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from lan1 to wan1
-A POSTROUTING -s 192.168.9.0/24 -o wan1 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT
# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
-A ufw-before-forward -i lan1 -o wan1 -j ACCEPT
-A ufw-before-forward -i wan1 -o lan1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[rest of file unchanged]
Оказывается, проблема была в /etc/dhcpcd.conf
.
При переходе от NetworkManager
к systemd-networkd
, я прокомментировал конец этого файла, содержащего название интерфейсов (насколько я помню, он был автоматически заполнен изменениями NetWork Manager, которые я сделал через nmtui
, когда попробовал два статических IPs).
Я подозреваю, что DHCP-клиент (необходимый для сетевой карты wan eno1
) пытался назначить адрес сетевой карте, а также не знал, что он статический (так как я не Так сказать в dhcpcd.conf
), и без ответа ему был назначен адрес 169.254.xx
. Теперь он работает, и у меня есть статический адрес только после добавления 2 строк в конце /etc/dhcpcd.conf
:
interface enp1s0
static ip_address=192.168.9.1/24
Я думаю, что сэкономил бы часы установки, если бы я установил сервер Ubuntu против рабочего стола и не должен был переключаться на systemd-networkd
. Но я многому научился на этом пути.
Примечание : с тех пор, как я опубликовал свой вопрос, я настроил DHCP-сервер ( isc-dhcp-server
), и чтобы заставить его работать, меня заставили чтобы удалить псевдоним lan1
, поэтому я вернулся к использованию enp1s0
(вместо lan1
, использованного в приведенном выше вопросе).
Working / etc / dhcpcd.conf
:
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.
# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel
# Inform the DHCP server of our hostname for DDNS.
hostname
# Use the hardware address of the interface for the Client ID.
#clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
duid
# Persist interface configuration when dhcpcd exits.
persistent
# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit
# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu
# Most distributions have NTP support.
option ntp_servers
# A ServerID is required by RFC2131.
require dhcp_server_identifier
noipv6rs
noipv6
# Generate SLAAC address using the Hardware Address of the interface
#slaac hwaddr
# OR generate Stable Private IPv6 Addresses based from the DUID
# mc 2020-07-18 commented below
#slaac private
interface enp1s0
static ip_address=192.168.9.1/24
#static routers=192.168.1.1
#static domain_name_servers=9.9.9.9
#interface eno1
# static ip_address=192.168.1.111/24
# static routers=192.168.1.1
# static domain_name_servers=9.9.9.9 149.112.112.112