OpenVPN 経由で単一のローカル マシンにアクセスするにはどうすればよいでしょうか?

OpenVPN 経由で単一のローカル マシンにアクセスするにはどうすればよいでしょうか?

これは些細な質問のように見えますが、まだ答えを見つけることができませんでした。

私の LAN (写真の青い部分) には、NAS と Raspberry Pi などのマシンがあります。Raspberry Pi に OpenVPN サーバーをインストールしました。OpenVPN クライアントが NAS (つまり FTP、HTTP など) にアクセスできるようにしたいと考えています。クライアントは、Raspberry と NAS 以外のマシンにアクセスできないようにする必要があります。

この図は私のネットワーク トポロジを示しています。

ネットワークトポロジ

OpenVPN クライアントをサーバーに接続できます。サブネットの競合があることはわかっていますが、サブネットを変更できません。

私のサーバー構成:

port 1194
proto udp
dev tun

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/myserver.crt
key /etc/openvpn/easy-rsa/keys/myserver.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem

server 10.8.0.0 255.255.255.0
#push "route 192.168.1.0 255.255.255.0"

ifconfig-pool-persist /etc/openvpn/easy-rsa/ipp.txt

keepalive 10 120
cipher AES-128-CBC
persist-key
persist-tun

status /var/log/openvpn-status.log
#log         /var/log/openvpn.log
log-append  /var/log/openvpn.log
verb 3

私のクライアント構成ファイル:

client

remote x.y.z.t 1194
proto udp
dev tun

ca /etc/openvpnclient/ca.crt
cert /etc/openvpnclient/client.crt
key /etc/openvpnclient/client.key

cipher AES-128-CBC

#route-method exe
#route-delay 3
#route 10.8.0.0 255.255.255.0
###route-nopull
route 192.168.1.20 255.255.255.255

resolv-retry infinite
nobind
persist-key
persist-tun

mute 20
verb 3

Windows クライアントを使用して接続できますが、NAS に ping したりアクセスしたりすることはできません。まだ何かが足りないのは確かですが、トラフィックをルーティングする方法がわかりません。この件に関するトピックをたくさん読みましたが、まだわかりません。

必要に応じて、OpenVPN サーバー ネットワーク上のルーターにルーティング ルールを追加できるはずです。


2019年11月18日 17:31 CET更新

主な要件は 2 つあります。

  1. クライアントが NAS にアクセスできるようにする必要がありますが、LAN 上の他のマシンにアクセスできるようにする必要はありません。
  2. クライアントのサブネットが NAS サブネット (つまり 192.168.1.0/24) と競合する場合でも、クライアントが接続できるようにする必要があります。

トム・ヤンとこの記事最初の問題の解決に役立ちました。2 番目の問題はまだ解決されていないと思います。

問題 1 の解決策:

サーバー構成では、OpenVPN クライアントから NAS へのルーティング要求を確実にするために、次の行を追加 (コメント解除) する必要がありました。

push "route 192.168.1.0 255.255.255.0"

NASからOpenVPNクライアントへのルーティングを有効にするために、このルーティングルールを追加しましたNASで:

vi /etc/sysconfig/network-scripts/route-eth0

この行を(空の)設定ファイルに追加する

10.8.0.0/24 via 192.168.1.88

そして、service network restart静的ルートが確実に適用されるようにしました。

その後、交通を制限しましたラズベリーパイでiptablesを介して。私は実際にインストールしてiptables-persistentこのガイド

iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 192.168.1.20 -j ACCEPT


アップデート#2

はい、接続するには多くのクライアントが必要なので、この理由から NAT とマスカレードは避けるべきだと思います。

答え1

/ が応答トラフィックをどこに送信すればよいかわかるように10.8.0.0/24、 (ゲートウェイは192.168.1.88、つまりRasp.PiOVPN サーバー)のルートを または (もちろん、その場合は が のデフォルト ゲートウェイであると想定)にNAS追加ROUTERする必要ROUTERがあります。NASNASROUTER

それができない場合は、 VPN クライアントからのすべてのトラフィックがサーバーから発信されているように見えるように、(または)をオンにしてSNAT/ を実行する必要があります。MASQUERADEiptablesnftablesRasp.Pi

クライアントは、Raspberry と NAS 自体以外のマシンにアクセスできないようにする必要があります。

で転送トラフィックを制限してくださいiptables。IP 転送を有効にするとRasp.Pi(有効にしないと VPN クライアントが LAN に到達できなくなります)、クライアントはサーバーの LAN 内の特定のホストに到達するために必要なルートを追加できます。そのため、特定のルートをプッシュしないだけでは、その目的を達成できません。

アップデート:

IP 転送を有効にするには (そして設定をブート後も永続化するには):

sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

この場合に必要な転送のみを許可するには(eth0およびがtun0想定されます):

iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -m conntrack --ctstate NEW -i tun0 -s 10.8.0.0/24 -o eth0 -d 192.168.1.20 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

NAS経由するトラフィックを転送するためにソース NAT を実行するには ( /で戻りルートを設定する必要がないようにするためROUTER)、次のようになりますeth0

iptables -t nat -F POSTROUTING

(チェーン内に他の必要なルールがある場合は、上記をスキップしてください)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

またはの IP がeth0時間経過/起動後も持続する場合:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT 192.168.1.88

PS: タッチしたテーブルをフラッシュしたい場合は、次のようにします。

for i in $(cat /proc/net/ip_tables_names); do iptables-restore /usr/share/iptables/empty-"$i".rules; done

また、iptablesコマンドは起動後も保持されないので、ルールをファイルに保存する必要がありますiptables-save(そして、何らかの方法で起動時にそれらを復元するようにシステムを構成します)。

アップデート2:

チェーンを適切に構成する方法については、上記FORWARD(表内filter) を必ず確認してください。ポリシー (または最後にDROP「デフォルト」ルール) がなければ、どのルールも役に立たなくなります。(そして、その部分を修正すると、ルールだけでは不十分になります)DROPACCEPTDROP

サブネット (より正確にはルート) の競合を回避するには、サブネット ルートではなくホスト ルート (いずれにせよ必要) をプッシュするのが最適です。そのため、push "route 192.168.1.20 255.255.255.255"代わりにそうする必要があります (サブネット マスクは実際には省略できます)。クライアント ホストが LAN ホスト (デフォルト ゲートウェイ以外) へのホスト ルートを持つ可能性ははるかに低くなります (Linux では、/32インターフェイスに非アドレスが割り当てられると、サブネット ルートが常に追加されます)。

また、ルートがクライアント上にすでに存在するという特殊なケースでは、たとえばpush "route 10.8.1.1"と宛先 をオンにするDNATこともできます (その場合でもでアクセスできるはずです)。192.168.1.20Rasp.Pi192.168.1.20NAS10.8.1.1

iptables -t nat -A PREROUTING -d 10.8.1.1 -j DNAT --to-destination 192.168.1.20

関連情報