nat를 사용하여 사용자에게 AWS의 여러 VPC에 대한 액세스 권한을 부여하는 openvpn 서버를 설정하려고 합니다.
이를 위해 명령을 실행하고 있습니다 ...
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o ens5 -j MASQUERADE
...여기서 10.10.0.0/24는 openvpn이 할당한 개인 IP 범위입니다.
서버 재부팅 시 이 iptables 명령을 자동으로 실행하는 데 문제가 있습니다.
현재 제가 하고 있는 방식은 다음 서비스를 이용하고 있습니다.
/etc/systemd/system/vpn_iptables.service
:
[Unit]
Description=Set up the firewall
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/vpn_iptables
[Install]
WantedBy=multi-user.target
스크립트 자체는 다음과 같이 정의됩니다 ...
/usr/local/sbin/vpn_iptables
:
#!/usr/bin/sh
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o ens5 -j MASQUERADE
나는 일관되지 않은 것처럼 보이는 행동을 알아내려고 머리를 쥐어짜고 있었습니다. 변장이 작동하는 것 같았는데 갑자기 작동이 멈췄습니다.
결국 재부팅 후 서버가 제대로 작동하려면 적어도 한 번은 SSH를 통해 서버에 접속해야 한다는 사실을 알게 되었습니다.
이로 인해 발생하는 문제를 디버깅하는 것이 매우 어렵습니다.
내 를 정의하는 방식과 관련이 있는 것 같지만 vpn_iptables.service
내가 뭘 잘못하고 있는지 이해할 만큼 충분히 알지 못합니다.
내가 원하는 것은 네트워크가 사용 가능해지자마자 서비스가 항상 시작되도록 하는 것입니다. 그러나 사용자가 로그인할 때까지 기다리면 안 됩니다.
제가 이해한 바는 이것이 WantedBy=multi-user.target
시스템이 사용자 연결을 수락할 준비가 되었는지 확인하기 위한 것이지만 실제로 사용자에게 로그인을 요구하는 이유는 무엇인지 모르겠습니다.
어떤 조언이라도 대단히 감사하겠습니다.
또한 이를 자동화하기 위해 /etc/rc.local에 넣는 것뿐 아니라 cloud-init per-boot 스크립트 등을 포함하여 다양한 다른 방법을 시도했다는 점을 언급하고 싶습니다. 다른 것은 작동하지 않는 것 같습니다. 나는 이것이 이러한 다양한 스크립트가 실행되는 타이밍과 관련이 있다고 가정합니다.
답변1
다른 사람에게 도움이된다면 해결책을 찾았습니다 ...
WantedBy를 다음으로 변경하면 됩니다...
[Install]
WantedBy=openvpn.service
이제 이것이 실제로 무엇을 의미하는지 더 잘 이해하게 되었으니 정말 의미가 있습니다.