Sco*_*ott 37 ssh ssh-tunneling openvpn tunneling
我有一个虚拟专用服务器,我想在我的服务器连接到 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
Run Code Online (Sandbox Code Playgroud)
需要澄清的事项:
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
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望能够从ssh登录myhome
到My VPS
的图片,而VPN是和使用腻子。
过去,在我的一个工作场所,我得到了一个非常奇怪的序列,可以通过 ssh 进入一个非常安全的服务器,该服务器@
在字符串中包含三个符号。因此,正如我想象的那样,它正在从一个盒子跳到另一个盒子,但由于这些跳跃盒子运行的是某些版本的 Windows 操作系统和一个专有应用程序,因此我无法看到幕后发生的事情。所以我没有太注意。现在我开始意识到,我可能处于相同或相似的情况。
使用图表和/或日志片段中的 IP 地址和端口,有人可以告诉我如何穿越此隧道并访问我的服务器吗?
小智 18
您被锁定在您的 VPS 之外,因为一旦 VPN 服务启动,您的 ssh 数据包将通过 VPN 而不是您的 VPS 的公共 IP 50.2.1.3 进行路由。
让我们假设您的服务器:
使用 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
Run Code Online (Sandbox Code Playgroud)
然后运行您的 OpenVPN 客户端配置: openvpn --config youropenvpn-configfile.ovpn &
然后,当您的服务器连接到 vpn 服务时,您将能够通过 ssh 进入您的服务器。
您需要添加适当的 iptable 过滤器以限制从非 ssh:22 会话访问您的公共 IP。
这可能有点晚了,但是......
问题是 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
Run Code Online (Sandbox Code Playgroud)
===
更新:
以上在 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
Run Code Online (Sandbox Code Playgroud)
其中“12.345.67.89”一定是原来的非VPN网关。
归档时间: |
|
查看次数: |
60693 次 |
最近记录: |