docker, iptables, wireguard: 어떤 방법을 선택해야 할까요?

docker, iptables, wireguard: 어떤 방법을 선택해야 할까요?

도움을 주셔서 감사합니다이전 스레드, 특정 문제를 찾았지만 근본적인 문제를 해결하는 방법을 잘 모르겠습니다.

이 문제를 요약하자면: 내 서버의 Docker가 어떤 방식으로든 iptable을 손상시키는 것 같습니다. 이 버그/기능이 기록되었습니다.여기그리고거기. 이는 해당 서버의 Wireguard 인스턴스가 서버와 동일한 로컬 네트워크에 있을 때 작동하지 않음을 보여줍니다. 다음과 같은 이유로 범위를 좁힐 수 있었습니다.

  • 문제 없이 동일한 네트워크에 동일한 구성(도커 제외)을 가진 두 개의 다른 서버가 있습니다.
  • 해당 서버에서 도커를 비활성화하자 문제가 사라졌습니다.

이는 문제가 /etc/wireguard/wg0.confiptables가 구성되지 않음으로 귀결된다는 것을 의미합니다.

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

/var/lib/docker/폴더를 다른 드라이브로 옮긴 후 문제가 발생했습니다. 이를 위해 나는 다음을 수행했습니다.

  • 편집 /usr/lib/systemd/system/docker.service: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock다음으로 변경됨ExecStart=/usr/bin/dockerd --data-root [New folder] -H fd:// --containerd=/run/containerd/containerd.sock
  • 심볼릭 링크를 생성했습니다.ln -s [New folder] /var/lib/docker

직감적으로 봤을 땐내 문제를 해결하기 위한 두 가지 옵션:

  1. 위 두 링크의 해결 방법 중 하나를 사용하세요. 솔직히 말해서, 나는 이러한 설명 중 일부를 완전히 이해했는지 잘 모르겠습니다. 또한 이 방법으로 변수를 추가할 수 있는지 확실하지 않기 때문에 제안된 솔루션( 에 추가) 중 하나가 작동할지 확실하지 ExecStartPost=않습니다 /usr/lib/systemd/system/docker.service.%i
  2. /var/lib/docker이동 중인 항목을 넣는 대신 설명할 수 있는 다른 방법을 찾아보세요 /usr/lib/systemd/system/docker.service.

누구라도 그랬을 거야이에 대한 제안이 있으십니까?내가 뭐 놓친 거 없니?

감사합니다!

답변1

운영 체제에서 기존 유닛 파일을 변경하려면 [1]을 사용하는 것이 가장 좋습니다 sudo systemctl edit whatever.service. 원본 파일을 편집하면 패키지 업데이트가 중단됩니다.

그런데 심볼릭 링크를 생성했다면 왜 유닛 파일을 변경해야 할까요?

이전 데이터 디렉터리의 내용을 새 디렉터리로 복사해 보세요. 뭔가 빠진 경우.

내 서버의 경우 나머지 배포 구성과 더 잘 작동하도록 패치가 적용될 수 있기 때문에 docker.io 또는 기타 외부 설치가 아닌 배포판에서 소프트웨어를 설치하는 것을 선호합니다. 내가 선택한 배포판은 podman나에게 꽤 잘 작동합니다. .dockerdocker

[1]https://www.2daygeek.com/linux-modifying-existing-systemd-unit-file/

관련 정보