これは些細な質問のように見えますが、まだ答えを見つけることができませんでした。
私の 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 つあります。- クライアントが NAS にアクセスできるようにする必要がありますが、LAN 上の他のマシンにアクセスできるようにする必要はありません。
- クライアントのサブネットが 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.Pi
OVPN サーバー)のルートを または (もちろん、その場合は が のデフォルト ゲートウェイであると想定)にNAS
追加ROUTER
する必要ROUTER
があります。NAS
NAS
ROUTER
それができない場合は、 VPN クライアントからのすべてのトラフィックがサーバーから発信されているように見えるように、(または)をオンにしてSNAT
/ を実行する必要があります。MASQUERADE
iptables
nftables
Rasp.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
「デフォルト」ルール) がなければ、どのルールも役に立たなくなります。(そして、その部分を修正すると、ルールだけでは不十分になります)DROP
ACCEPT
DROP
サブネット (より正確にはルート) の競合を回避するには、サブネット ルートではなくホスト ルート (いずれにせよ必要) をプッシュするのが最適です。そのため、push "route 192.168.1.20 255.255.255.255"
代わりにそうする必要があります (サブネット マスクは実際には省略できます)。クライアント ホストが LAN ホスト (デフォルト ゲートウェイ以外) へのホスト ルートを持つ可能性ははるかに低くなります (Linux では、/32
インターフェイスに非アドレスが割り当てられると、サブネット ルートが常に追加されます)。
また、ルートがクライアント上にすでに存在するという特殊なケースでは、たとえばpush "route 10.8.1.1"
と宛先 をオンにするDNAT
こともできます (その場合でもでアクセスできるはずです)。192.168.1.20
Rasp.Pi
192.168.1.20
NAS
10.8.1.1
iptables -t nat -A PREROUTING -d 10.8.1.1 -j DNAT --to-destination 192.168.1.20