[내 구성] Ubuntu 18.04 - digitalocean Droplet/Server
[배경] 내 연구에 따르면 /etc/network/intefaces는 18.04부터 더 이상 사용되지 않으며 netplan이라는 것이 도입된 것으로 추측됩니다. 데스크탑은 NetworkManager를 사용하고 서버 Netplan은 제어권을 systemd-networkd에 전달합니다.
[질문] 종료/다시 시작 시 실행할 스크립트를 가져옵니다. /etc/network/interfaces에서 pre-up/post-down을 사용하려고 계획했지만 위의 이유로 인해 작동하지 않습니다.
특히 제가 실행하려는 스크립트는 종료 및 재부팅 시 iptables를 저장하고 복원하는 것과 관련이 있습니다.
[iptables-percious] iptables-percious를 설치하라고 요청하지 마세요. 이 경우에도 iptables를 버퍼와 같은 별도의 파일에 저장하고 복원해야 하기 때문입니다. iptables-persist가 파일을 다른 위치에 저장하고 재부팅 시 로드할 수 있다면 고려해 보겠습니다.
어떤 아이디어가 있나요?
[노력했어요]
결과 없이 /etc/NetworkManager/dispatcher.d/01firewall에 실행 파일을 만들었습니다. 위에서 언급한 것처럼 서버 설치 시 NetworkManager를 사용하지 않기 때문인가요?
/lib/systemd/system/에 서비스를 만들었습니다.
[Unit] Description=ipres [Service] ExecStart=/bin/sh -c '/sbin/iptables-save -c > /etc/blah/firewall/up.save' ExecStop=/bin/sh -c '/sbin/iptables-save -c > /etc/blah/firewall/down.save' [Install] WantedBy=multi-user.target
파일이 생성되었지만 비어 있기 때문에 부분적으로 성공했습니다(iptables-save가 너무 늦게/너무 일찍 실행되기 때문입니까?)
답변1
마지막으로 파일에서 이 서비스 정의를 사용했습니다 /etc/systemd/system/ipres.service
.
[Unit]
Description=ipres
Wants=network-online.target
After=network.target auditd.service
ConditionPathExists=/etc/mypath
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/my.program load
ExecStop=/usr/local/bin/my.program save
[Install]
WantedBy=basic.target
그리고 my.program을 사용했습니다 /usr/local/bin/my.program
(chroot 읽기 및 쓰기)이와 같이:
#!/bin/sh
case $1 in
load)
#Do some stuff
;;
save)
#Do some stuff
;;
*)
echo "Invalid action '$1'"
;;
esac
서비스를 시작하고 활성화하는 것을 잊지 마십시오.
systemctl enable ipres.service && systemctl start ipres.service
나 한테 딱이야.
답변2
서버에서 명령을 수동으로 실행하고 다음을 사용하여 서비스를 활성화했습니까?
systemctl 활성화 <서비스 이름>.service
기본 설치를 사용하여 우분투 16.04 및 18.04에서 서비스 파일을 사용해 보았는데 모든 것이 잘 작동하는 것 같습니다.