배포:
VM -- (eth0)RPI(wlan0) -- Router -- ISP
^ ^ ^ ^
DHCP Static DHCP GW
참고: RPI 호스트 이름:gateway
• 목표는 네트워크 외부에서 가상 머신에 액세스할 수 있도록 하는 것입니다. 튜토리얼을 따라하면 완료됩니다.https://www.youtube.com/watch?v=IAa4tI4JrgI, RPI의 라우터 및 포트 전달을 통해 dhcpcd를 설치하고 RPI에 iptables를 구성합니다.
• 여기에 interfaces
문제를 해결하기 위해 auto wlan0을 주석 처리한 곳이 있습니다(이전에는 주석 처리가 해제되었지만 여전히 똑같습니다...).
# 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
• 이는 다음과 같이 firewall.conf
사용됩니다 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
• 여기있어 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;
}
• 알 수 없는 오류 메시지:
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
버전:
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
질문:
1) 오류 메시지는 무엇을 Not running dhcpcd because /etc/network/interfaces defines some interfaces that will use a DHCP client or static address
의미합니까? 위의 구성을 기반으로 어떻게 문제를 해결할 수 있습니까?
Accountant
2) 바인딩을 주석 처리할 때에도 항상 내가 원하는 것과 동일한 IP를 얻는 호스트를 제외하고 호스트에 내 dhcpcd.conf를 기반으로 IP 주소가 할당되지 않은 이유는 무엇입니까 ? 여러 호스트의 MAC과 IP를 바인딩할 수 있도록 이 문제를 해결하는 방법은 무엇입니까?
3) 이 기호는 무엇을 의미합니까?
#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
interfaces
Linux에서 파일을 표시하는 규칙은 무엇입니까?
답변1
질문 1.) 죄송합니다. 뭔가 잘못 이해하신 것 같습니다.
dhcpcd
DHCP입니다고객데몬은 일반적으로 NetworkManager에 의해 시작 ifupdown
되거나 systemd
. 그것은 당신을 위해 그것을 처리할 것입니다 wlan0
.
너할 수 있는dhcpcd
원한다면 따라 시작하십시오 systemd
. 그러나 이렇게 하려면 배포판의 모든 일반 네트워크 인터페이스 구성 로직(즉, /etc/network/interfaces
비어 있어야 하는 주석이 아닌 라인)을 모두 비활성화하고 필요한 경우 이를 사용자 정의 스크립트로 바꿔야 합니다. 특별한 목적을 위해서만 수행해야 하는지 확신할 수 없다면 수행해서는 안 됩니다.
dhcpcd
IP 주소는 다른 호스트에게 절대 제공되지 않습니다. 추가한 부분이 dhcpcd.conf
ISC DHCP 구성 파일에 속하는 것 같습니다.섬기는 사람데몬 dhcpd
(예, 단 한 글자만 다름):
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;
}
그러나 언급한 YouTube 튜토리얼을 따르고 있다면 아직 dhcpd
설치 하지 않았을 수도 있습니다 dnsmasq
.
내가 아는 한 동등한 구문 dnsmasq.conf
은 다음과 같습니다.
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
면책조항: 실제로 사용해본 적이 없으므로 dnsmasq
이 내용은 해당 매뉴얼 페이지에 대한 빠른 Google 검색을 기반으로 합니다.
질문 2.) 언급한 튜토리얼에서는 dnsmasq
작동해야 합니다 eth0
. 이에 대해 아무 말도 하지 않았으므로 실행 중인지 모르겠습니다. 그렇지 않은 경우 항상 동일한 IP를 얻는 클라이언트는 아직 만료되지 않은 이전에 수신한 이전 DHCP 임대로 대체될 수 있습니다. 예, 네트워크에 작동 중인 DHCP 서버가 없는 것으로 나타나면 DHCP 클라이언트는 DHCP 임대를 영구적으로 저장하고 계속 사용할 수 있습니다.
질문 3.): /etc/network/interfaces
전형적인 Debian/Ubuntu 스타일 네트워크 인터페이스 구성 파일입니다. 그것을 보기 위한 문서 man interfaces
, 또는이봐.
Debian, *Ubuntu, Raspbian 등에서는 NetworkManager에 다음을 수행할 수 있는 플러그인이 있습니다.읽다 /etc/network/interfaces
하지만쓰다그것에.
선택한 데스크탑 환경에서 NetworkManager 구성 도구(예: ) nmcli
또는 GUI 기반 NetworkManager 구성 도구를 사용하는 경우 구성이 디렉토리의 파일에 저장됩니다.nmtui
/etc/NetworkManager/system-connections/
NetworkManager 가 설치되지 않은 경우 이 파일 은 명령 및 를 포함하는 /etc/network/interfaces
패키지에서 사용됩니다 . 패키지에는 부팅 시 실행 되는 시스템 시작 스크립트도 포함되어 있으므로 . 새 네트워크 인터페이스가 자동으로 로드되고 줄이 있으면 규칙이 실행됩니다.ifupdown
ifup
ifdown
ifup -a
auto <interface name>
/etc/network/interfaces
ifup <interface name>
/etc/network/interfaces
allow-hotplug <interface name>
답변2
이 "오류"의 원인을 찾았습니다.
dhcpcd
일종의 "초보/초보 보호"를 사용 dhcpcd
하면 일부 "초보/초보"가 및 /etc/interfaces
.
dhcpcd
/etc/interfaces
다음 쉘 스크립트를 사용하여 확인하십시오 /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 $@
난 그냥 줄을 바꿔서 써
if grep -q -E "^[[:space:]]*iface[[:space:]]*.*[[:space:]]*inet[[:space:]]*(dhcp|static)" \
|static
매개변수를 제거하면
if grep -q -E "^[[:space:]]*iface[[:space:]]*.*[[:space:]]*inet[[:space:]]*(dhcp)" \
마지막 에코 라인을 다음과 같이 조정합니다.
echo "DHCP client"
폴리스티렌귀하의 예제에 denyinterfaces "NAME OF YOUR STATIC INTERFACE, WHICH SHALL BE CONTROLLED ONLY BY /etc/interfaces"
예제를 추가하십시오 .denyinterfaces eth0
/etc/dhcpcd.conf