가상 사설 서버가 있는데 서버가 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 및 그 사이의 모든 항목이있는 사실은 내가 아는 것이 아니라 내 가정입니다.
- 매분마다 다른 VPS를 ping하고 apache2를 실행하는 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
이 시점에서, 나는에서 ssh를 할 수 있도록하고 싶습니다 myhome
에 My VPS
VPN을 위로하고 퍼티를 사용하는 동안, 사진에.
과거에는 직장 중 하나 @
에서 문자열에 세 개의 표시가있는 매우 안전한 서버 하나에 ssh하는 매우 이상한 순서가 주어졌습니다 . 그래서 상상했던 것처럼 상자에서 상자로 점프했지만 점프 상자에서 일부 버전의 Windows OS 및 독점 앱을 실행했기 때문에 랩에서 무슨 일이 있었는지 알 수 없었습니다. 그래서 나는 많은 관심을 기울이지 않았다. 이제 나는 같은 상황이나 비슷한 상황에 처해 있음을 깨닫기 시작했습니다.
다이어그램 및 / 또는 로그 스 니펫의 IP 주소 및 포트를 사용하여 누군가이 터널을 통과하고 서버에 액세스하는 방법을 알려줄 수 있습니까?
답변
VPN 서비스가 가동되면 ssh 패킷이 VPS의 공용 IP 50.2.1.3이 아닌 VPN을 통해 라우팅되므로 VPS가 잠 깁니다.
서버가 다음과 같이 가정합니다.
- 퍼블릭 IP는 50.1.2.3입니다 (예제 설정에 따라)
- 퍼블릭 IP 서브넷은 50.1.2.0/24입니다.
- 기본 게이트웨이는 xxx1입니다.
- 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 x.x.x.1
그런 다음 OpenVPN 클라이언트 구성을 실행하십시오. openvpn --config youropenvpn-configfile.ovpn &
그러면 서버가 VPN 서비스에 연결되어있는 동안 서버로 ssh 할 수 있습니다.
비 SSH 세션에서 공개 IP에 대한 액세스를 제한하려면 적절한 iptable 필터를 추가해야합니다.
답변
조금 늦을 수도 있지만 …
문제는 기본 게이트웨이가 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
===
최신 정보:
위의 내용은 데비안 제시에서 잘 작동합니다. 그러나 이전 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 게이트웨이 여야합니다.