Lee*_*run 9 linux vpn debian iptables openvpn
我有一台运行 Debian 7 的服务器,我想连接到 VPN,让除某些端口(SSH、托管网站等)之外的所有流量都通过 VPN。
我已经在互联网上搜索了一段时间,但似乎没有任何效果。
我不是 iptables/网络专家,所以也许我错过了一些东西......
这是我的脚本:
这是在 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
Run Code Online (Sandbox Code Playgroud)
这是通过“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
Run Code Online (Sandbox Code Playgroud)
这是 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
Run Code Online (Sandbox Code Playgroud)
我的问题是当 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
Run Code Online (Sandbox Code Playgroud)
其中 xxxx 是我服务器的公共 IP,yyyy/y 是我服务器公共 IP 地址的子网,ethX 是我服务器的公共以太网接口,zzzz 是默认网关。
希望这可以帮助别人。
归档时间: |
|
查看次数: |
7722 次 |
最近记录: |