가상 사설 서버가 있고 내 서버가 VPN 서비스에 연결된 동안 웹 서버를 실행하고 싶습니다.
공급자에 대한 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
과거에 내 직장 중 한 곳에서 @
문자열에 세 개의 플래그가 있는 매우 안전한 서버로 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"
첫 번째 줄은 create rule
이고 두 번째 줄은 둘 다 생성합니다 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 허용(10.8.0.1/24에서 모든 포트 22 proto tcp 주석 "VPN 클라이언트가 SSH를 사용하도록 허용")
클라이언트 측에서:
OpenSSH가 설치되어 실행 중이고 방화벽에 포트 22가 열려 있는지 확인하세요.
그런 다음: $ssh[이메일 보호됨] ("사용자"를 서버/호스트의 로그인 이름으로 변경합니다.)