데비안을 실행하는 원격 홈 서버가 있습니다. 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