イントラネット上にSSH経由でのみアクセスできるLinuxマシンがあります。このマシンは、openconnectを使用してVPNに接続する必要がありますが、そうすると、イントラネットのIPが無効になるため、SSHから切断されます。
割り当てられたIPを使用してVPN内から再接続できますが、VPNが接続されるたびにIPが変更されるため、このマシンだけのネットワークを制御することはできません。
vPNへの接続中にSSH接続を維持する方法はありますか?ありがとう。
openconnectには、ルーティングを構成するためのスクリプトを受け取る--script引数が必要です。これがないと、接続は成功しますが、名前は解決されず、イントラネットのIPは有効なままです。
私は現在、Ubuntuのデフォルトの/ etc/vpnc/vpnc-scriptを使用しています( ここに貼り付け )シェルスクリプトは得意ですが、ネットワークについてはほとんど知りません。変更する必要がある場合は、何をどのように変更するかについての参照が必要です。
openconnect
の--script
および--script-tun
オプションを使用し、customvpnc-script を指定する必要があります。良い出発点は、openconnect
と一緒にすでに配布されているvpnc-script
です。たとえば、OSX(HomeBrewed openconnect
)では、/usr/local/etc/vpnc-script
にあります。
Openconnectの公式ドキュメントによると、次の点に注意してください。
OpenConnectjustはVPNサーバーとの通信を処理します。それは、それが実行されているすべてのさまざまなオペレーティングシステムでネットワークルーティングとネームサービスを構成する方法を知りません。
ルーティングおよびネームサービスを設定するために、通常vpnc-scriptと呼ばれる外部スクリプトを使用します。
openconnect
のプロキシサーバーとして機能する ocproxy という優れたプロジェクトがすでに存在するため、ocproxy([〜#〜] o [ 〜#〜]pen[〜#〜] c [〜#〜]onnectプロキシ)。
ocproxyは、lwIPに基づくOpenConnectのユーザーレベルのSOCKSおよびポート転送プロキシです。 ocproxyを使用する場合、OpenConnectは、ユーザーがプロキシから具体的に要求するネットワークアクティビティのみを処理するため、VPNインターフェイスがホスト上のすべてのネットワークトラフィックを「ハイジャック」することはなくなりました。
echo $1 | Sudo openconnect -u $2 -d --timestamp -v --passwd-on-stdin --script-tun --script "ocproxy -D $3 -v" $4
交換:
$1
with:OpenConnectパスワード$2
with:OpenConnectユーザー名$3
with:必要なSocks5プロキシポート$4
with:OpenConnectサーバーアドレスカーネル内でパケットフィルタリングを処理するiptables
の内容を調べることをお勧めします。反対方向からopenconnect
を使用します。デフォルト設定では、新しく作成されたVPNインターフェースを優先して、標準インターフェースへのアクセスを削除します。最初に行うことは、VPN接続によって作成されているルートを把握することです。次に、ゲートウェイとルートを処理するスクリプトを記述し、最後にiptables
をフラッシュして、VPN「チェーン」(iptables
で使用される用語)をクリアします。次のようなスクリプトがあります。
IPADDR=NN.NN.NN.N
DESIREDNET1=MM.MM.MM.MM
GATEWAY_LINE=$(netstat -rn | grep ${IPADDR})
GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $2}')
GATEWAY_DEV=gw
if [ "$GATEWAY" = "*" ]; then
GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $8}')
GATEWAY_DEV=''
fi
# add custom routes
route add -net $DESIREDNET1 netmask 255.255.0.0 dev cscotun0
...
# reset the default route
route del default
route add default $GATEWAY_DEV $GATEWAY
# flush iptables to clear the ciscovpn chain
iptables --flush
iptables --delete-chain
# Add out own nameservers back
if [ -f /etc/resolv.conf.vpnbackup ]
then
cat /etc/resolf.conf /etc/resolv.conf.vpnbackup > /etc/resolv.conf
echo "nameserver $GATEWAY" >> /etc/resolv.conf
fi
「通常の」設定を追加できるようにするには、VPNをオフにしているときに/etc/resolv.conf
を/etc/resolf.conf
にコピーする必要があります。
幸運を。
その理由は、LinuxサーバーがVPN接続を確立すると、すべてのトラフィックがリモートネットワークのゲートウェイを経由してルーティングされるためだと思います。 VPNクライアントがリモートネットワークとの通信にリモートゲートウェイのみを使用するように構成すると、SSHを有効にすることができます。
私はopenconnectを使用していませんが、openvpnでは、VPN構成でuse this connection only for resources on its network
にチェックマークを付けることができます。
この問題の回避策は、端末接続に関係する両方のマシン上の同じVPNサーバーに接続することです。
わたしにはできる。
たとえば、VPSを使用していて、同じデータセンターにミニVPSを作成でき、2つのVPSのそれぞれにローカルIPを提供できる場合は、ミニVPSをトンネルとして使用してトンネルSSH接続を確立できます。このようにして、VPNに接続されている場合でもターゲットVPSに接続できます。
SSHを使用してリモート接続するには:
したがって、これの前提条件は次のとおりです。
これは、DigitalOcean、Linodeなどの人気のあるクラウドで簡単かつ実行可能です