仮想プライベートサーバーがあり、サーバーがVPNサービスに接続されているときにWebサーバーを実行したい
プロバイダーへのVPN接続が確立されていない場合、このサーバー、ssh、scp、httpなどを使用して、やりたいことをすべて実行できます。
Openvpnが実行されてプロバイダーのVPNサービスに接続されると、サーバーには何らかの理由でアクセスできなくなり、当然のことながら正当な理由があります。
写真はこのようなものです:
My VPS ------------
+----------------+ / \
| | / Internet / 101.11.12.13
| 50.1.2.3|-----------------\ cloud /----<--- me@myhome
| | / \
| 10.80.70.60| / \
+----------------+ \ \
: \_____________/
: :
: :
: :
: :
+------------------+ :
| 10.80.70.61 | :
| \ | :
| \ | :
| 175.41.42.43:1197|..............:
| 175.41.42.43:yy|
| ..... |
| 175.41.42.43:xx|
+------------------+
Legend
------ Line No VPN connection present
...... Line VPN connection established
明確にすること:
OpenVPNログはこれらを示します:
UDPv4 link remote: [AF_INET]175.41.42.43:1197
[ProviderName] Peer Connection Initiated with [AF_INET]175.41.42.43:1197
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbin/ip link set dev tun0 up mtu 1500
/sbin/ip addr add dev tun0 local 10.80.70.60 peer 10.80.70.61
この時点で、VPNが稼働していてPuTTYを使用しているときに、画像のmyhome
からMy VPS
にsshできるようにしたいと思います。
過去に、私の職場の1つで、文字列に@
記号が3つある非常に安全なサーバーにSSHで接続するという非常に奇妙なシーケンスが与えられました。つまり、私が想像しているように、ボックスからボックスへとジャンプしていましたが、ジャンプボックスはWindows OSのいくつかのバージョンとそれらの独自のアプリを実行していたため、何が起こっているのか一目でわかりませんでした。だから私はあまり注意を払わなかった。今、私は気づき始めています。同じまたは同様の状況にあるかもしれません。
図やログスニペットのIPアドレスとポートを使用して、このトンネルを通過してサーバーにアクセスする方法を誰かに教えてもらえますか?
VPNサービスが起動すると、sshパケットはVPSのパブリックIP 50.2.1.3ではなくVPN経由でルーティングされるため、VPSからロックアウトされます。
あなたのサーバーを仮定しましょう:
Iproute2を使用して以下を実行します。
ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev eth0
ip route add table 128 default via x.x.x.1
次に、OpenVPNクライアント設定を実行します:openvpn --config youropenvpn-configfile.ovpn &
サーバーがvpnサービスに接続されている間は、サーバーにSSHで接続できます。
適切なiptableフィルターを追加して、ssh:22以外のセッションからパブリックIPへのアクセスを制限する必要があります。
これは少し遅れるかもしれませんが...
問題は、OpenVPNによってデフォルトゲートウェイが変更され、OpenVPNを開始する前に適切なルートを設定しない限り、現在のSSH接続が切断されることです。
次は私のために働きます。 iptablesとip(iproute2)を使用します。以下では、OpenVPNが起動する前のデフォルトゲートウェイインターフェースが「eth0」であると想定しています。これは、eth0がデフォルトゲートウェイインターフェイスではなくなった場合でも、eth0への接続が確立されたときに、その接続の応答パケットがeth0に再び戻るようにするためです。
接続マーク、ファイアウォールマーク、ルーティングテーブルに同じ番号を使用できます。それらの違いをより明確にするために、明確な数値を使用しました。
# set "connection" mark of connection from eth0 when first packet of connection arrives
Sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
# set "firewall" mark for response packets in connection with our connection mark
Sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
# our routing table with eth0 as gateway interface
Sudo ip route add default dev eth0 table 3412
# route packets with our firewall mark using our routing table
Sudo ip rule add fwmark 4321 table 3412
===
更新:
上記は、Debian Jessieでは私にとってはうまくいきます。しかし、古いWheezyシステムでは、ルーティングテーブルエントリに「via」を追加する必要があることがわかりました。
# our routing table with eth0 as gateway interface
Sudo ip route add default dev eth0 via 12.345.67.89 table 3412
「12.345.67.89」は元の非VPNゲートウェイでなければなりません。