Debian を実行するリモートホームサーバーがあります。 ISPはポート22をブロックするため、偶然に非標準ポートでSSHを使用するようになりました。 OpenVPN クライアントがサーバー上で実行されていない場合、ネットワーク外部から SSHd に接続する際に問題はありません。 OpenVPN クライアントを起動すると、次のメッセージが表示されます。
$ ssh -v -p 922 domain.dyndns.org
OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016
debug1: Reading configuration data /home/user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to domain.dyndns.org [1.2.3.4] port 922
debug1: connect to address 1.2.3.4 port 922: Connection timed out
ssh: connect to host domain.dyndns.org port 922: Connection timed out
動的IPアドレスがありますが、サーバーがルーターの背後にあるため、sshdをパブリックアドレスにバインドすることを考えることはできません。可能であってもtun0を介してパケットが失われないと思います。
この問題を解決するためにオンラインにアクセスしたときに、次のスクリプトが見つかりました。
#!/bin/bash
grep -q fix_ssh /etc/init.d/openvpn || sed -i.backup -e '/start_vpn ()/ i fix_ssh () {\
ip rule add fwmark 65 table novpn\
ip route add default via 192.168.0.1 dev eth0 table novpn\
ip route flush cache\
iptables -t mangle -A OUTPUT -p tcp --sport 922 -j MARK --set-mark 65\
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 922 -j DROP\
}\
undo_fix_ssh () {\
iptables -D INPUT -i tun0 -p tcp -m tcp --dport 922 -j DROP\
iptables -t mangle -D OUTPUT -p tcp --sport 922 -j MARK --set-mark 65\
ip route del default via 192.168.0.1 dev eth0 table novpn\
ip rule del fwmark 65 table novpn\
ip route flush cache\
}'\
-e 's/start_vpn$/& \&\& fix_ssh/' \
-e 's/stop_vpn$/& \&\& undo_fix_ssh/' \
/etc/init.d/openvpn
私は成功せずにそれを実行しようとしました。私が見つけた他の答えと比較すると、この解決策の問題が何であるかを完全にはわかりません。問題を解決する方法が不足しています。
この問題を解決する最良の方法が何であるかよくわかりません。 OpenVPNサービスは、私が制御できない商用サービスです。
編集:私の目標は、SSHサーバーが稼働していて接続中にOpenVPNサーバーにSSHとして接続できることです。他のすべてのトラフィックがVPNを通過したいです。最終的には、SSHFSを使用してSSHサーバー上のファイルを表示し、ポート転送を実行して、離れたノートブックが同じVPN接続を共有できるようにしたいと思います。
------------ ----------------
|My Server |--->OpenVPN>---|Commercial VPN |-->Internet>--Web
------------ Over internet | Server |
| -----------------
/|\
SSH
Over Internet
/|\
----------
| Laptop |
----------
編集2:いいえ、ラップトップはSSHdサーバーとは異なる場所にあります。明確にするために画像を再編集しました。
編集3:ルーターが関連しています。サーバーはルーターの背後にあります。 tun0 は OpenVPN 接続です。
$ sudo /sbin/iptables-save
# Generated by iptables-save v1.4.14 on Mon Dec 26 13:03:22 2016
*mangle
:PREROUTING ACCEPT [11077726:5767595109]
:INPUT ACCEPT [9445198:5734927839]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [10132207:7571233156]
:POSTROUTING ACCEPT [10132784:7571256515]
-A OUTPUT -p tcp -m tcp --sport 922 -j MARK --set-xmark 0x41/0xffffffff
COMMIT
# Completed on Mon Dec 26 13:03:23 2016
# Generated by iptables-save v1.4.14 on Mon Dec 26 13:03:23 2016
*filter
:INPUT ACCEPT [9445173:5734925686]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [10132201:7571259291]
-A INPUT -i tun0 -p tcp -m tcp --dport 922 -j DROP
COMMIT
# Completed on Mon Dec 26 13:03:23 2016
編集:この問題を避けるために、Raspberry piのようなものを使ってsshを使用する方が良いですか?他の難しさに遭遇しますか?まだ根本原因を確信できず、これが解決されるかもしれません。 SSHトンネルチェーンが間違った形式ですか?アイデアは次のとおりです。
[ノートブック]->SSH->--------->-[Pi]-同じネットワーク->-[マイサーバー]->-[OpenVPN]
/|\
[router]
編集する:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.68.10.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
10.68.10.1 10.68.10.5 255.255.255.255 UGH 0 0 0 tun0
10.68.10.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.68.10.5 128.0.0.0 UG 0 0 0 tun0
192.40.88.17 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
.ovpn ファイルの内容:
client
dev tun
proto udp
remote server 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass auth.txt
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.pem
# Allow calling of built-in executables and user-defined scripts.
script-security 2
# Parses DHCP options from openvpn to update resolv.conf
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf