Déploiement:
VM -- (eth0)RPI(wlan0) -- Router -- ISP
^ ^ ^ ^
DHCP Static DHCP GW
Remarque: Nom d'hôte RPI: gateway
• L'objectif était de rendre VMS accessible à l'extérieur du réseau. Accompli, selon le tutoriel https://www.youtube.com/watch?v=iaa4ti4jrgi , via le transfert de port sur le routeur et le RPI, en installant DHCPCD et en configurant des IPTABLES sur RPI.
• Voici mon interfaces
, où j'ai commenté l'Auto WLAN0, tente de résoudre le problème (avant, il était décalé, et était toujours la même chose ...)
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
#auto wlan0
iface wlan0 inet dhcp
wpa-ssid FunBox-84A8
wpa-psk 7A73FA25C43563523D7ED99A4D
#auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
• Voici le firewall.conf
Utilisé par le iptables
:
# Generated by iptables-save v1.6.0 on Sun Feb 17 20:01:56 2019
*nat
:PREROUTING ACCEPT [86:11520]
:INPUT ACCEPT [64:8940]
:OUTPUT ACCEPT [71:5638]
:POSTROUTING ACCEPT [37:4255]
-A PREROUTING -d 192.168.1.21/32 -p tcp -m tcp --dport 170 -j DNAT --to-destination 192.168.2.83:22
-A PREROUTING -d 192.168.1.21/32 -p tcp -m tcp --dport 171 -j DNAT --to-destination 192.168.2.83:443
-A PREROUTING -d 192.168.1.21/32 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.2.66:3389
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT
# Completed on Sun Feb 17 20:01:56 2019
# Generated by iptables-save v1.6.0 on Sun Feb 17 20:01:56 2019
*filter
:INPUT ACCEPT [3188:209284]
:FORWARD ACCEPT [25:2740]
:OUTPUT ACCEPT [2306:270630]
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
COMMIT
# Completed on Sun Feb 17 20:01:56 2019
# Generated by iptables-save v1.6.0 on Sun Feb 17 20:01:56 2019
*mangle
:PREROUTING ACCEPT [55445:38248798]
:INPUT ACCEPT [3188:209284]
:FORWARD ACCEPT [52257:38039514]
:OUTPUT ACCEPT [2306:270630]
:POSTROUTING ACCEPT [54565:38310208]
COMMIT
# Completed on Sun Feb 17 20:01:56 2019
# Generated by iptables-save v1.6.0 on Sun Feb 17 20:01:56 2019
*raw
:PREROUTING ACCEPT [55445:38248798]
:OUTPUT ACCEPT [2306:270630]
COMMIT
# Completed on Sun Feb 17 20:01:56 2019
• iptables -L
:
pi@gateway:/etc$ Sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
• Voici le 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
# Most distributions have NTP support.
option ntp_servers
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu
# A ServerID is required by RFC2131.
require dhcp_server_identifier
# Generate Stable Private IPv6 Addresses instead of hardware based ones
slaac private
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1
# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
denyinterfaces eth0
Host Accountant {
hardware ethernet 10:60:4b:68:03:21;
fixed-address 192.168.2.83;
}
Host Accountant1 {
hardware ethernet 00:0c:29:35:95:ed;
fixed-address 192.168.2.66;
}
Host Accountant3 {
hardware ethernet 30:85:A9:1B:C4:8B;
fixed-address 192.168.2.70;
}
• Le message d'erreur, que je ne suis pas capable de comprendre:
root@gateway:/home/pi# systemctl restart dhcpcd
Warning: dhcpcd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Job for dhcpcd.service failed because the control process exited with error code.
See "systemctl status dhcpcd.service" and "journalctl -xe" for details.
root@gateway:/home/pi# systemctl status dhcpcd
● dhcpcd.service - dhcpcd on all interfaces
Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/dhcpcd.service.d
└─wait.conf
Active: failed (Result: exit-code) since Sun 2019-02-17 20:36:42 GMT; 6s ago
Process: 775 ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w (code=exited, status=6)
Feb 17 20:36:42 gateway systemd[1]: Starting dhcpcd on all interfaces...
Feb 17 20:36:42 gateway dhcpcd[775]: Not running dhcpcd because /etc/network/interfaces
Feb 17 20:36:42 gateway dhcpcd[775]: defines some interfaces that will use a
Feb 17 20:36:42 gateway dhcpcd[775]: DHCP client or static address
Feb 17 20:36:42 gateway systemd[1]: dhcpcd.service: Control process exited, code=exited status=6
Feb 17 20:36:42 gateway systemd[1]: Failed to start dhcpcd on all interfaces.
Feb 17 20:36:42 gateway systemd[1]: dhcpcd.service: Unit entered failed state.
Feb 17 20:36:42 gateway systemd[1]: dhcpcd.service: Failed with result 'exit-code'.
Warning: dhcpcd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
root@gateway:/home/pi#
root@gateway:/home/pi# systemctl daemon-reload
root@gateway:/home/pi# systemctl status dhcpcd
● dhcpcd.service - dhcpcd on all interfaces
Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/dhcpcd.service.d
└─wait.conf
Active: failed (Result: exit-code) since Sun 2019-02-17 20:36:42 GMT; 1min 23s ago
Feb 17 20:36:42 gateway systemd[1]: Starting dhcpcd on all interfaces...
Feb 17 20:36:42 gateway dhcpcd[775]: Not running dhcpcd because /etc/network/interfaces
Feb 17 20:36:42 gateway dhcpcd[775]: defines some interfaces that will use a
Feb 17 20:36:42 gateway dhcpcd[775]: DHCP client or static address
Feb 17 20:36:42 gateway systemd[1]: dhcpcd.service: Control process exited, code=exited status=6
Feb 17 20:36:42 gateway systemd[1]: Failed to start dhcpcd on all interfaces.
Feb 17 20:36:42 gateway systemd[1]: dhcpcd.service: Unit entered failed state.
Feb 17 20:36:42 gateway systemd[1]: dhcpcd.service: Failed with result 'exit-code'.
root@gateway:/home/pi#
• gateway
version:
pi@gateway:/etc$ cat os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
Des questions:
1) Qu'est-ce que le message d'erreur Not running dhcpcd because /etc/network/interfaces defines some interfaces that will use a DHCP client or static address
Signifie? Comment le réparer, selon ma configuration ci-dessus?
2) Pourquoi les hôtes ne sont pas attribués à l'adresse IP conformément à mon DHCPCD.conf, à l'exception de l'hôte Accountant
, qui reçoit toujours la même adresse IP, que je souhaite, même si vous commenciez la liaison ...? Comment réparer cela afin de pouvoir lier plus d'un hôtes Mac avec IP?
3) Que signifie cette notation:
#auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
Quelles sont les règles de la notation pour le fichier interfaces
sous Linux?
Question 1.) Désolé, on dirait que vous avez mal compris quelques choses.
dhcpcd
est un client DHCP Démon, qui est normalement démarré par NetworkManager ou ifupdown
, pas directement par systemd
. C'est ce qui traitera l'attribution de l'adresse IP pour votre wlan0
.
Vous peut Utilisez dhcpcd
tel que démarré par systemd
Si vous le souhaitez, cependant, cela nécessitera une désactivation de toute la logique de configuration d'interface réseau normale (c.-à-d. /etc/network/interfaces
Doit être vide de lignes non-commentaire) de la distribution et de la remplacer par votre propre script personnalisé si nécessaire. C'est pour des utilisations spéciales seulement; Si vous n'êtes pas absolument certain, vous devriez le faire, vous ne devriez pas.
dhcpcd
_ ne servira jamais d'adresses IP à d'autres hôtes. Cette partie que vous avez ajoutée à dhcpcd.conf
on dirait qu'il appartiendrait au fichier de configuration du serveur ISC DHCP Daemon, dhcpd
(Oui, c'est juste une différence de lettre) à la place:
Host Accountant {
hardware ethernet 10:60:4b:68:03:21;
fixed-address 192.168.2.83;
}
Host Accountant1 {
hardware ethernet 00:0c:29:35:95:ed;
fixed-address 192.168.2.66;
}
Host Accountant3 {
hardware ethernet 30:85:A9:1B:C4:8B;
fixed-address 192.168.2.70;
}
Mais si vous suivez le didacticiel YouTube que vous avez mentionné, vous n'avez peut-être peut-être même pas dhcpd
installé, puisque dnsmasq
est censé faire ce travail.
Pour autant que je puisse dire, la syntaxe équivalente pour dnsmasq.conf
serait:
dhcp-Host=10:60:4b:68:03:21,192.168.2.83,Accountant
dhcp-Host=00:0c:29:35:95:ed,192.168.2.66,Accountant1
dhcp-Host=30:85:A9:1B:C4:8B,192.168.2.70,Accountant3
Clause de non-responsabilité: Je n'ai pas réellement utilisé dnsmasq
, cela est donc basé sur une page de googling rapidement.
Question 2.) Dans le tutoriel que vous avez mentionné, dnsmasq
était censé agir en tant que serveur DHCP sur eth0
. Vous n'avez rien dit à ce sujet, alors je ne sais pas si cela fonctionnait ou non. Sinon, le client qui attirait toujours la même adresse IP aurait pu simplement revenir à un ancien bail de DHCP déjà reçu qui n'a pas encore été expiré. Oui, les clients DHCP peuvent stocker un bail DHCP de manière persistante et continuer à l'utiliser si un réseau ne semble pas avoir un serveur DHCP de travail disponible.
Question 3.): /etc/network/interfaces
est un fichier de configuration de réseau de réseaux classique de Debian/Ubuntu. Utilisez man interfaces
pour voir la documentation pour cela, ou regarde ici.
Dans Debian, * Ubuntu, Raspbian, etc., NetworkManager aura un plug-in qui sera lire/etc/network/interfaces
mais ne va pas écrire à cela.
Si des outils de configuration de NetworkManager tels que nmcli
, nmtui
ou les outils de configuration de votre site Web de votre environnement de choix sont utilisés, la configuration serait enregistrée dans les fichiers dans /etc/NetworkManager/system-connections/
au lieu.
Si NetworkManager n'est pas installé, le fichier /etc/network/interfaces
est utilisé par le package ifupdown
, qui inclut les commandes ifup
et ifdown
. Le package comprend également un script de démarrage système qui exécutera ifup -a
au démarrage, activant toutes les interfaces réseau qui ont auto <interface name>
in /etc/network/interfaces
. Il y a aussi une règle Udev qui exécutera ifup <interface name>
si un pilote d'une nouvelle interface réseau est chargé automatiquement et /etc/network/interfaces
a une ligne allow-hotplug <interface name>
ligne pour cela.
J'ai trouvé la raison de cette "erreur".
dhcpcd
utilise une sorte de "protection noob/novice", qui garantit un moyen sûr de gérer la gestion du réseau, si un "noob/novice" essaie d'utiliser les deux dhcpcd
et /etc/interfaces
.
dhcpcd
vérifie le /etc/interfaces
avec le script shell suivant /usr/lib/dhcpcd5/dhcpcd
:
#!/bin/sh -e
DHCPCD=/sbin/dhcpcd
INTERFACES=/etc/network/interfaces
if grep -q -E "^[[:space:]]*iface[[:space:]]*.*[[:space:]]*inet[[:space:]]*(dhcp|static)" \
$INTERFACES; then
echo "Not running dhcpcd because $INTERFACES"
echo "defines some interfaces that will use a"
echo "DHCP client or static address"
exit 6
fi
exec $DHCPCD $@
J'ai simplement alterné la ligne
if grep -q -E "^[[:space:]]*iface[[:space:]]*.*[[:space:]]*inet[[:space:]]*(dhcp|static)" \
en supprimant l'argument de |static
, à
if grep -q -E "^[[:space:]]*iface[[:space:]]*.*[[:space:]]*inet[[:space:]]*(dhcp)" \
et ajusté la dernière ligne d'écho à:
echo "DHCP client"
PS Assurez-vous d'ajouter un denyinterfaces "NAME OF YOUR STATIC INTERFACE, WHICH SHALL BE CONTROLLED ONLY BY /etc/interfaces"
, par exemple denyinterfaces eth0
à votre /etc/dhcpcd.conf
.