NAS Synology(Certificate Authenticated)でOpenVPN TAPを使用する

背景



Synology NAS用のOpenVPNパッケージの喜びはすぐに消えてしまいました。 小規模オフィス用のネットワークをセットアップする試みは、ほとんど開始することなく終了しました。 パッケージを構成するためのインターフェースには、このパッケージ自体のすべての魅力がありませんでした(ログインとパスワードによる認証のみが利用可能です)。



最近、私は記事に出くわしました: 「証明書認証を使用してトラフィックをOpenVPNトンネルにルーティングするようにNAS Synologyに教えます。

必要なもののようです。 しかし!

判明したように、ファームウェアの腸へのそのような「実際の」介入でも、TAPインターフェースを介した接続を上げることはできません。

じゃあ 途中で停止しないでください...



問題の本質



上記の記事で示されているように、TAPアダプターのタイプのみですべてを実行すると、次の効果が得られます。



1. VPN接続を選択し、接続をクリックします。

2. SSHセッションでは、トンネルが上昇し、サーバーが応答し、データが到着していることがわかります。 しかし、Synologyインターフェースは「接続」があることを教えてくれます。

3. 15〜20秒後、インターフェイスは接続に失敗したことを丁寧に通知し、動作中の接続を閉じます。



何が起こっているかを詳細に調査した結果、デバイスのすべてのスクリプトで、OpenVPN接続のステータスを決定するアルゴリズムが規定されており、TUNにしかなれないという事実に基づいています。



これは、スクリプト内のすべてのコメントでも証明されています。



問題解決



この記事の執筆時点では、DMS 5.0-4493 Update 1がデバイスにインストールされています。

したがって、ここで説明するすべては彼女に関連しています。



スクリプトの管理の利便性のために、管理ネットワーク共有にすべてを保存することが決定されました。



その上にOpenVPNフォルダーを作成します。これには、クライアントが機能するために必要なすべてが含まれます。



1. OpenVPN構成ファイル「tap.conf」:



dev tap proto udp remote ServerIP 444 client tls-client ns-cert-type server ca key/ca.crt cert key/Client1.crt key key/Client1.key comp-lzo yes tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ping-restart 12 ping 3 status log/openvpn-status.log log log/openvpn.log script-security 2 float
      
      







2.証明書フォルダー:「キー」

3.ログのあるフォルダー:「log」

4.スクリプトがVPNを開始/停止します。



Start.sh(トンネルスタート):



 #!/bin/sh CONF_DIR="/volume1/adm/OpenVPN/" OPENVPN_CONF="tap.conf" KERNEL_MODULES="x_tables.ko ip_tables.ko iptable_filter.ko nf_conntrack.ko nf_defrag_ipv4.ko nf_conntrack_ipv4.ko nf_nat.ko iptable_nat.ko ipt_REDIRECT.ko xt_multiport.ko xt_tcpudp.ko xt_state.ko ipt_MASQUERADE.ko tun.ko" SERVICE="ovpnc" # Make device if not present (not devfs) if [ ! -c /dev/net/tun ]; then # Make /dev/net directory if needed if [ ! -d /dev/net ]; then mkdir -m 755 /dev/net fi mknod /dev/net/tun c 10 200 fi /usr/syno/bin/iptablestool --insmod $SERVICE ${KERNEL_MODULES} echo "Starting openvpn client..." /usr/sbin/openvpn --daemon --cd ${CONF_DIR} --config ${OPENVPN_CONF} --writepid /var/run/ovpn_client.pid
      
      



nf_conntrack_ipv4.ko nf_nat.ko iptable_nat.ko ipt_REDIRECT.ko xt_multiport.ko xt_tcpudp.ko xt_state.ko ipt_MASQUERADE.ko tun.ko" #!/bin/sh CONF_DIR="/volume1/adm/OpenVPN/" OPENVPN_CONF="tap.conf" KERNEL_MODULES="x_tables.ko ip_tables.ko iptable_filter.ko nf_conntrack.ko nf_defrag_ipv4.ko nf_conntrack_ipv4.ko nf_nat.ko iptable_nat.ko ipt_REDIRECT.ko xt_multiport.ko xt_tcpudp.ko xt_state.ko ipt_MASQUERADE.ko tun.ko" SERVICE="ovpnc" # Make device if not present (not devfs) if [ ! -c /dev/net/tun ]; then # Make /dev/net directory if needed if [ ! -d /dev/net ]; then mkdir -m 755 /dev/net fi mknod /dev/net/tun c 10 200 fi /usr/syno/bin/iptablestool --insmod $SERVICE ${KERNEL_MODULES} echo "Starting openvpn client..." /usr/sbin/openvpn --daemon --cd ${CONF_DIR} --config ${OPENVPN_CONF} --writepid /var/run/ovpn_client.pid







Stop.sh(トンネル停止):



 #!/bin/sh echo "Kill openvpn client..." /bin/kill `cat /var/run/ovpn_client.pid` 2>/dev/null
      
      







OnLine.sh(サーバーが利用できない場合、トンネルを再起動します):



 #!/bin/sh ping -c 3 10.23.122.1 if [ $? -ne 0 ]; then echo "Stoping VPN.." sh Stop.sh echo "Sleep 5." sleep 5 echo "Start...." sh Start.sh fi
      
      







一般に、これで十分です。



テストが示すように、インターネットまたはリモートサーバーが切断されると、VPNは自動的に正常に再起動します。 OnLineスクリプトは、NASとともにVPNを自動的に開始するために作成されました。 しかし、フルタイムスケジューラを使用すると、スクリプトの実行を「1時間ごと」に追加できるため、可用性チェックを追加しました。



この実装では、NASファームウェアはトンネルについてはわかりませんが(それは良いことです)、同時にリモートネットワークのすべてのリソースが利用可能です(VPNからIPへのネットワークバックアップは正常に機能します)。



All Articles