私のサーバーにOpenVPNがインストールされており、gitとWebサーバーも実行しています。インストールを始める前に、最初はVPNクライアントが特定のWebサイトにアクセスし、gitのSSHにのみアクセスできるようにする必要があると思いました。 VPSのローカルIPである10.254.1.0/24でのみポート接続を許可することが分かりましたが、VPNのIPではなく実際のIPにパケットが転送されるようでした。 tun インターフェイスで事前ルーティングのための現在のルール (私は UFW を使用しており、これは ufw before.rules の iptables ルールの一部です):
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.254.1.0/24 -o eth0 -j MASQUERADE
COMMIT
VPNを介して送信されるパケットにクライアントの実際のIPが割り当てられる理由はわかりません。むしろ、このパケットはVPNネットワークで送信されると予想します。私はこの問題に対する解決策を考えていますが、唯一のアイデアは2番目のサーバーにOpenVPNをインストールしてそこから接続することです。しかし、私がこの質問を投稿する理由は、すでにOpenVPNがインストールされている現在のサーバーでこれを行うことを好むからです。どんな提案でも歓迎します。
答え1
私はあなたがパブリックアドレスを介してVPNサーバーにアクセスしようとし、この接続がトンネルを通過すると予想していると仮定します。
これは起こりません。クライアントはトンネルを確立して維持するために、パブリックネットワークを介してVPNサーバーに接続する必要があります。
いくつかのオプションがありますが、そのうちの簡単なものはDnsmasqを使用して分割 - 水平DNSを設定するようです。
- サーバーへのDnsmasqのインストール
/etc/hosts
サーバー名をVPNアドレスに指すエントリを設定します。DNS 8.8.8.8
顧客をプッシュするよりもDNS 10.254.1.1
これにより、クライアントがVPNに接続したときに内部的にサーバー名を解決できます。
サーバー自体が自分の名前をパブリックアドレスに解決し続けるようにするには、代わりにDnsmasqの追加のホストファイルを使用してください/etc/hosts
。
*: 家庭が間違っているなら、全体の答えが役に立たないので、ぜひ教えてください:-)