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
今、これが実際に何を意味するのかをよりよく理解するようになったので、本当に意味があります。