私は仮想プライベートサーバーを持っていて、私のサーバーが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
説明が必要な事項:
- 上下のすべてのIPアドレスとポート番号は仮想です。
- ポート番号xx、yy、およびその間の内容は、私が知っているという事実ではなく仮定です。
- apache2を実行しながら、毎分別のVPSをpingするcronジョブを設定しました。 apache2 ログで VPN を有効にすると、元の IP アドレスが 50.1.2.3 から 175.41.42.43 に変更され、VPN が正常に動作していることがわかります。
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を使用して写真からSSHに接続できるようにしたいですmyhome
。My VPS
過去に私の仕事の1つで、@
文字列に3つのフラグを持つ非常に安全なサーバーにSSHを接続する非常に奇妙なシーケンスがありました。だから私が想像するようにボックスからボックスにジャンプしますが、ジャンプボックスはその上にいくつかのバージョンのWindows OSと排他的なアプリを実行しているので、後で何が起こっているのかわかりません。だからあまり興味を持っていませんでした。今私は私と同じような状況にあるかもしれないことに気づき始めました。
ダイアグラムおよび/またはログフラグメントのIPアドレスとポートを使用して、誰かがそれを介してトンネリングして自分のサーバーにアクセスする方法を教えてください。
答え1
VPN サービスが開始されると、SSH パケットは VPS のパブリック IP 50.2.1.3 の代わりに VPN 経由でルーティングされるため、VPS はロックされます。
あなたのサーバーを想定してみましょう。
- パブリックIPは50.1.2.3です(例設定基準)。
- パブリックIPサブネットは50.1.2.0/24です。
- デフォルトゲートウェイはおそらく50.1.2.1でしょう。
- eth0 はゲートウェイのデバイスです。
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 50.1.2.1
次に、OpenVPN クライアント構成を実行します。openvpn --config youropenvpn-configfile.ovpn &
その後、サーバーがVPNサービスに接続すると、SSHを介してサーバーにログインできます。
SSH:22以外のセッションに対するパブリックIPへのアクセスを制限するには、適切なiptableフィルタを追加する必要があります。
これらのコマンドの詳細については、以下を参照してください。関連回答。
答え2
少し遅れるかもしれませんが…
問題は、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ではなくゲートウェイでなければなりません。
答え3
またヘキサクロロベンゼン回答、再起動後もこれらの変更を永続的に適用するには、次のネットワーク管理者コマンドを使用できます。
nmcli connection modify ens192 +ipv4.routing-rules "priority 100 from 50.1.2.3 table 128"
nmcli connection modify ens192 +ipv4.routes "0.0.0.0/0 50.1.2.1 table=128, 50.1.2.0/24 onlink=true table=128"
最初の行はcreaterule
で、2行目は両方とも生成されますroutes
。これは元の答えの答え0.0.0.0/0
と同じです。default
答え4
OpenVPNホストに接続されたクライアントPCがあるとします。
VPNトンネルを介したSSHの場合:https://askubuntu.com/questions/1069846/connected-to-openvpn-server-but-cant-ssh
OpenVPNホストで:
$ sudo ufwを有効にする
$ sudo ufwを許可する 1194/udp コメント "OpenVPN接続を許可する"
$ sudo ufwを許可する
クライアント側から:
OpenSSHがインストールされ、実行中で、ファイアウォールでポート22が開いていることを確認してください。
その後: $ssh[Eメール保護] (「ユーザー」をサーバー/ホストのログイン名に変更します。)