다음과 같이 systemd
자체적으로 관리하는 여러 개의 고정 IPv4 및 IPv6 주소를 실행하는 Debian 시스템이 있습니다 ./etc/systemd/network/10-static-eth0.network
[Match]
Name=eth0
[Network]
Address=2a04:----::149/64
Address=2a04:----::242/64
Address=2a04:----::243/64
Gateway=2a04:----:0001
Address=5.----.149/25
Address=5.----.242/25
Address=5.----.243/25
Gateway=5.----.129
DNS=89.----.4
DNS=46.----.104
OpenVPN, Bind9 등을 통해 시스템에서 실행되는 여러 프로세스가 있습니다. systemd
이들은 모두 인터페이스의 특정 IP에 바인딩되도록 설정되어 있습니다 eth0
. 그러나 시작 후 주소에 바인딩할 수 없기 때문에 시작에 실패합니다 IPv6
.
이것을 어떻게 알 수 있나요?
네트워크를 테스트하기 위해 타겟을 사용 ping
하고 이후에 두 개의 테스트 유닛을 만들었는데 , 이런 일이 발생합니다:ping6
network.target
network-online.target
IPv4 테스트 결과:
server.example:~# systemctl status abootping.service
● abootping.service - A boot-time ping for network testing
Loaded: loaded (/lib/systemd/system/abootping.service; enabled)
Active: inactive (dead) since Thu 2015-11-26 11:01:58 CET; 45s ago
Main PID: 433 (code=exited, status=0/SUCCESS)
Nov 26 11:01:54 server.example ping[433]: PING test-ping-host.example (89.-----.8) from 5.----.149 : 56(84) bytes of data.
Nov 26 11:01:54 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=1 ttl=59 time=4.92 ms
Nov 26 11:01:55 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=2 ttl=59 time=4.92 ms
Nov 26 11:01:56 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=3 ttl=59 time=4.84 ms
Nov 26 11:01:57 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=4 ttl=59 time=5.41 ms
Nov 26 11:01:58 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=5 ttl=59 time=4.95 ms
Nov 26 11:01:58 server.example ping[433]: --- test-ping-host.example ping statistics ---
Nov 26 11:01:58 server.example ping[433]: 5 packets transmitted, 5 received, 0% packet loss, time 4007ms
Nov 26 11:01:58 server.example ping[433]: rtt min/avg/max/mdev = 4.843/5.010/5.414/0.209 ms
IPv6 테스트 결과:
server.example:~# systemctl status abootping6.service
● abootping6.service - A boot-time ping6 for network testing
Loaded: loaded (/lib/systemd/system/abootping6.service; enabled)
Active: failed (Result: exit-code) since Thu 2015-11-26 11:01:54 CET; 56s ago
Main PID: 436 (code=exited, status=2)
Nov 26 11:01:54 server.example ping6[436]: ping: bind icmp socket: Cannot assign requested address
Nov 26 11:01:54 server.example systemd[1]: abootping6.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Nov 26 11:01:54 server.example systemd[1]: Failed to start A boot-time ping6 for network testing.
Nov 26 11:01:54 server.example systemd[1]: Unit abootping6.service entered failed state.
보시다시피 부팅 후 IPv4는 제대로 작동하지만 IPv6은 그렇지 않으며 IPv6이 필요한 모든 부팅 프로세스는 바인딩으로 인해 실패합니다.
나에 대해서network-online.target
내 시동 장치가 네트워크가 실제로 작동한 후에만 시작되도록 하기 위해 After=network.target network-online.target
모든 장치를 추가했습니다.
network-online.target
그것은 이것을 가지고 있습니다 wants
:
포함하다:
[Unit]
Description=Wait for Network to be Configured
Documentation=man:systemd-networkd-wait-online.service(8)
DefaultDependencies=no
Conflicts=shutdown.target
Requisite=systemd-networkd.service
After=systemd-networkd.service
Before=network-online.target
[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes
[Install]
WantedBy=network-online.target
~에 따르면문서:
systemd-networkd-wait-online은 네트워크 구성을 기다리는 일회성 시스템 서비스입니다. 기본적으로 이는 알고 있고 systemd-networkd.service(8)에 의해 관리되는 모든 링크가 완전히 구성되거나 실패할 때까지 기다립니다. 그리고 적어도 하나의 링크가 운영자를 얻을 때까지 기다립니다.
이 서비스 대기의 실제 효과는 시작 시 매우 눈에 띄며 내 테스트 ping
서비스는 이를 존중합니다.
ping
SSH 로그인 후
누군가 내 IPv6 네트워크가 잘못 구성되었다고 생각하기 전에 다음과 같은 몇 가지 추가 증거가 있습니다.
부팅 직후 머신에 SSH로 연결하여 사용하려고 하면
ping6
작동합니다.server.example:~# ping6 -I 2a04:-----::242 test-ping-host.example -c 5 PING test-ping-host.example(test-ping-host.example) from 2a04:-----::242 : 56 data bytes 64 bytes from test-ping-host.example: icmp_seq=1 ttl=59 time=7.41 ms 64 bytes from test-ping-host.example: icmp_seq=2 ttl=59 time=7.41 ms 64 bytes from test-ping-host.example: icmp_seq=3 ttl=59 time=7.31 ms ^C --- test-ping-host.example ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 7.314/7.381/7.415/0.047 ms
예를 들어 재부팅하면
lighttpd
IPv6에 올바르게 바인딩되며 IPv6 클라이언트를 사용하거나ping6
다른 컴퓨터에서 호스팅된 웹 사이트를 열 수 있습니다.
이게 내 문제야: 이게 정상인가요? IPv6도 systemd-networkd-wait-online
사용 가능이 보장되어 있으므로 작동해야 합니까? 아니면... at least one link to gain a carrier.
IPv4를 사용할 수 있게 된 후 대기가 중지되고 IPv6 주소가 라우팅할 수 없는 상태로 유지된다는 뜻인가요? 이 문제를 어떻게 해결할 수 있나요?
답변1
분명히 내 말이 옳았습니다. IPv6를 기다리지 않습니다. 이 문제를 프로젝트 Github에 게시했는데 누군가 RFE로 표시했습니다.https://github.com/systemd/systemd/issues/2037
문제를 일시적으로 해결하려면 이 해결 방법(IPv6 DAD 비활성화)을 확인하십시오.http://serverfault.com/questions/766253/ensure-systemd-wait-for-ipv6-before-start-service-unit