부팅할 때 호스트에 macvlan 브리지를 생성하도록 되어 있는 스크립트가 있습니다. 호스트는 최신 Arch Linux입니다. 이는 호스트와 게스트가 동일한 네트워크를 공유하고 *서로 대화*할 수 있도록 하기 위한 것입니다. 다음 URL에서 제공된 지침을 찾았습니다.
(시작시 실행도 찾아봤습니다.Systemd용 시작 스크립트를 작성하는 방법은 무엇입니까?그리고https://stackoverflow.com/questions/21830670/systemd-start-service-after-특이적-service).
그러나 문제는 첫 번째 시도에서 스크립트가 작동하지 않는다는 것입니다. macvlan 장치와 라우팅 테이블을 생성하지만 호스트가 게스트를 핑하거나 그 반대로 할 수는 없습니다.
그러나 두 번째 실행하면 작동합니다. 즉, 오류 메시지에도 불구하고 작동합니다."create_macvlan_bridge.sh[4489]:RTNETLINK 답변: 파일이 존재합니다.". 이제 호스트는 예상대로 게스트에게 ping을 보낼 수 있습니다.
첫 번째 시도에서 작동해야 함, 하지만 왜 안되는지 이해가 안 돼요. 누구든지 도와줄 수 있나요?
[고쳐 쓰다]결과에 ip a
두 번째 inet
항목이 표시된 것을 확인했습니다.macvlan0@enp10s0두 번째 실행 후:
macvlan0@enp10s0: <브로드캐스트, 멀티캐스트, UP, LOWER_UP> mtu 1500 qdisc noqueue 상태 UP 그룹 기본 qlen 1000
link/ether da:a2:21:d1:95:24 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.3/24 범위 전역 macvlan0
valid_lft 항상 Preferred_lft 항상
inet 192.168.1.22/24 brd 192.168.1.255 범위 전역 보조 macvlan0
valid_lft 항상 Preferred_lft 항상
두 번째 IP 주소가 라우터의 dhcp에 의해 어떻게 제공되고 secondary
속성이 있는지 확인하세요.
이상한 점은 두 번째 실행 후 게스트가 호스트 192.168.1.3을 핑할 수 있다는 것입니다.그리고"보조" 주소에서.
코드는 아래와 같이 표시됩니다.
스크립트:/usr/local/bin/create_macvlan_bridge.sh
#!/bin/sh
# Evert Mouw, 2013
# Modified by Marc Ranolfi, 2017-07-24
# ------------
# wait for network availability
# ------------
TESTHOST=kernel.org
while ! ping -q -c 1 $TESTHOST > /dev/null
do
echo "$0: Cannot ping $TESTHOST, waiting another 5 secs..."
sleep 5
done
# ------------
# network config
# ------------
HWLINK=enp10s0
MACVLN=macvlan0
IP=192.168.1.3/24
NETWORK=192.168.1.0/24
GATEWAY=192.168.1.1
# ------------
# setting up $MACVLN interface
# ------------
ip link add link $HWLINK $MACVLN type macvlan mode bridge
ip address add $IP dev $MACVLN
ip link set dev $MACVLN up
# ------------
# routing table
# ------------
# empty routes
ip route flush dev $HWLINK
ip route flush dev $MACVLN
# add routes
ip route add $NETWORK dev $MACVLN metric 0
# add the default gateway
ip route add default via $GATEWAY
시스템 장치 파일: /etc/systemd/system/create_macvlan_bridge.service
[Unit]
Description=Create_macvlan_bridge
Wants=network-online.target
After=network.target network-online.target dhcpcd.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/create_macvlan_bridge.sh
[Install]
WantedBy=multi-user.target
답변1
스크립트에도 문제가 있습니다. 두 번 할 필요는 없어요. 약 1분 후에 작업이 다시 시작되었습니다. 하지만 여전히 짜증스럽습니다. 불필요한 라우팅 변경을 하기로 결정했습니다. 호스트의 일반 트래픽이 물리적 인터페이스를 사용해서는 안 될 이유가 없습니다. 간단히 macvlan을 사용하여 가상 머신에 액세스할 수 있습니다. 따라서 실제로 필요한 유일한 라우팅 변경은 다음과 같습니다.
IP 경로 새로 고침 개발자 $MACVLN
IP 경로 추가 $VMHOST dev $MACVLN 메트릭 0
그 시점에는 더 이상 문제가 없었습니다.
적어도 Centos 7에서는 /sbin/ifup-local이 부팅 화면 끝에서 systemctl restart network에 의해 실행되는데, 이 또한 쓸모가 없습니다. 따라서 다른 인터페이스가 시작될 때 스크립트를 실행하고 싶지 않기 때문에 이와 같이 시작해야 하지만 거기에 스크립트를 넣을 수 있습니다.
만약에! "$1" = "em1"을 테스트하고 0을 종료합니다.
/sbin/ifup-local일 때에도 핑 루프가 필요하지 않을 것입니다. 사실 무한 루프이기 때문에 위험하기 때문에 네트워크 문제가 있는 경우 시스템 시작 시 이 문제가 해결되지 않을 수도 있습니다.
답변2
질문에 대한 최신 업데이트의 자세한 정보를 통해 문제가 무엇인지 알 수 있었습니다.
dhcpcd.service
모든 인터페이스를 활성화했습니다 . 비활성화하고 활성화하려고 시도했는데 enp10s0
작동했습니다.
그래서:
systemctl disable dhcpcd
systemctl enable dhcpcd@enp10s0
바라보다.