加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 某些端口上的OpenVPN绕过

发布时间:2020-12-13 17:09:32 所属栏目:Linux 来源:网络整理
导读:我有一台运行Debian 7的服务器,我想连接到VPN,让所有流量通过VPN传递,除了一些端口(SSH,托管网站等). 我现在已经在互联网上搜索了一段时间,但似乎没有按预期工作. 我不是iptables /网络专家,所以也许我错过了一些东西…… 这是我的脚本: 在VPN脚本之前 这是
我有一台运行Debian 7的服务器,我想连接到VPN,让所有流量通过VPN传递,除了一些端口(SSH,托管网站等).

我现在已经在互联网上搜索了一段时间,但似乎没有按预期工作.

我不是iptables /网络专家,所以也许我错过了一些东西……

这是我的脚本:

在VPN脚本之前

这是在VPN之前启动的脚本,它用于阻止所有流出/流出而不通过VPN,除了一些端口(这里是SSH).

如果我只启动这个脚本,那就完成了他的工作.我可以通过SSH连接到我的服务器,但所有其他端口都被阻止,服务器无法进入Internet(因为VPN未启动).

#!/bin/bash

# Flush iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Default policy
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Accept packets through VPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT

# Accept local connections
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Accept connection to/from VPN servers
iptables -A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j ACCEPT

# Disable Reverse Path Filtering on all network interfaces
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
    echo 0 > $i
done

# Open ports on iptable
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

路由OpenVPN脚本

这是通过“route-up”OpenVPN选项调用的脚本.这是应该使端口绕过VPN的脚本.

#!/bin/bash

WAN_GATEWAY="xxx.xxx.xxx.xxx"

echo 1 > /proc/sys/net/ipv4/ip_forward

# Delete table 100 and flush all existing rules
ip route flush table 100
ip route flush cache
iptables -t mangle -F PREROUTING

# Table 100 will route all traffic with mark 1 to WAN (no VPN)
ip route add default table 100 via $WAN_GATEWAY dev eth0
ip rule add fwmark 1 table 100
ip route flush cache

# Mark packets on port 22
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

OpenVPN配置文件

这是OpenVPN客户端配置文件.

client
dev tun
proto udp
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
comp-lzo
verb 3
redirect-gateway def1
user nobody
group nogroup
script-security 2
auth-user-pass /path/to/config/login.conf
route-up /path/to/scripts/vpn_up.sh
remote xxx.xxx.xxx.xxx 443
ca /path/to/config/certs/ch.crt

我的问题是当VPN上升时,我再也无法访问我的服务器了.

我究竟做错了什么?

非常感谢你的帮助 !

解决方法

经过一番搜索,我找到了这个帖子: https://forum.linode.com/viewtopic.php?p=50114&sid=b440414422596bb7dbc96cf7c9ee511f#p50114

我现在修改了我的“路由”OpenVPN脚本如下,它终于工作了!我删除了所有其他杂乱的规则(iptable PREROUTING,MASQUERADE等).

这是我最后的“路由”脚本:

ip route flush table 100
ip route flush cache

ip rule add from x.x.x.x table 100
ip route add table 100 to y.y.y.y/y dev ethX
ip route add table 100 default via z.z.z.z

其中x.x.x.x是我服务器的公共IP,y.y.y.y / y是我服务器公共IP地址的子网,ethX是我服务器的公共以太网接口,z.z.z.z是默认网关.

希望这可以帮助别人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读