linux – 某些端口上的OpenVPN绕过

前端之家收集整理的这篇文章主要介绍了linux – 某些端口上的OpenVPN绕过前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一台运行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是默认网关.

希望这可以帮助别人.

猜你在找的Linux相关文章