Debian で OpenVPN サーバーを設定して VPN トラフィックをインターネットにルーティングする方法

Debian で OpenVPN サーバーを設定して VPN トラフィックをインターネットにルーティングする方法

Debian 上に OpenVPN サーバーをセットアップしています。

サーバーを構成し、クライアントは接続できます。クライアントには 10.11.22.0/24 の範囲の IP アドレスが割り当てられています。

server.conf ファイルには次の内容が含まれています:

client-to-client
status /var/log/openvpn-status.log
verb 3

server 10.11.22.0 255.255.255.0

# This ensures Internet-bound traffic to-from clients can pass through the VPN
push "redirect-gateway def1"
push "dhcp-option DNS (my DNS address)"

IP転送をオンにしています( に設定/etc/sysctl.conf

iptablesにNATルールを追加する必要があると思います。おそらく次のような形式です。

iptables -t nat -A POSTROUTING -s 10.11.22.0/24 -o eth0 -j MASQUERADE

(訂正歓迎!)

私の質問は、このルールを永続的にするには(再起動後も存続するために)、どこに配置すればよいかということです。

理想的には、VPN サーバーが起動したときにルールが追加され、停止したときにルールが削除されると思いますが、サーバーは systemctl で自動起動するように設定されているため、おそらく問題にはなりません。

他のシステム管理者が驚かずに見つけられるように、適切な場所で実行したいだけです。

答え1

netfilter-persistent一般的に、ファイアウォールは VPN から独立している必要があります。Debian では、およびiptables-persistentパッケージ (両方とも必須)を使用して管理 (保存および復元) できます。

ただし、OpenVPN サーバーの起動時またはシャットダウン時に任意のコマンドを実行することは可能であり、そのためのスクリプト インターフェイスが用意されています。この場合、netfilter-persistent& を使用しないでくださいiptables-persistent。そうしないと、ファイアウォールが肥大化する可能性があります (次のシナリオを検討してください: スクリプトがルールを追加し、ファイアウォールが保存され、スクリプトがルールを削除し、再起動するとファイアウォールがロードされます)。保存されたルールに従って状態を記述すると、スクリプトが実行され、別のルール。何度か繰り返すと、ファイアウォールに同じルールがいくつか表示されます。

まず、OpenVPN 設定に以下を追加します:

script-security 2
up /etc/openvpn/add-rule.sh
down sudo /etc/openvpn/remove-rule.sh

script-securityスクリプトを実行するには、これが必要です。

おそらく、非ルート ユーザーuserまたはgroupサーバー構成 (これは良いことです!) を持っているため、downスクリプトはそのユーザー/グループ権限で実行されます。したがって、ルールを削除するには、権限を再度取得する必要があります。次の行を含むファイルを作成し/etc/sudoers.d/openvpn-remove-rule、このユーザーが上記のコマンドを実行できるようにします。

<user> ALL=(ALL) NOPASSWD: /etc/openvpn/remove-rule.sh

( <user>OpenVPN 設定で設定されているユーザーに置き換えます。おそらくnobody)。そうしないと、chmod 0400 /etc/sudoers.d/openvpn-remove-rulesudo は読み込みを拒否します。

説明なぜスクリプトが必要なのかsudo 経由で iptables コマンド呼び出しを OpenVPN 構成に直接追加するだけでは不十分です。つまり、セキュリティです。

逆に、upコマンドはルート権限を削除する前に実行されますが、一貫性を保つために、これにもスクリプトを使用することをお勧めします。

これらのスクリプトの内容は明らかです。サーバーの起動時とシャットダウン時に実行する必要がある iptables コマンドを配置するだけです。(原則として、iptables だけでなく、任意のコマンドを使用できます。) 両方のスクリプトを実行可能にします。

man openvpnスクリプト インターフェイスの参考としてお読みください。

関連情報