我设置了我的服务器(我们称其为服务器 A)防火墙,以便不允许输入/输出规则,除了: - 传入 ssh 连接 - 传出 ssh 连接 现在运行良好!
现在,我想 1. 使用“-w” openssh 选项(tun 接口)建立到给定 IP 地址的按需 VPN 服务器连接 2. 建立此 VPN 连接后,将所有传出流量路由到此新的 tun 接口(这样当我执行 wget 时,流量会通过 vpn 隧道)
第 1 步很容易完成。但是,我搞乱了第2步。
这是我的防火墙规则:
# Allow incoming / outgoing SSH
iptables -I INPUT -j ACCEPT -p tcp --dport 22 --sport 1:65000
iptables -A OUTPUT -j ACCEPT -p tcp --dport 1:65000 --sport 22
###Not working
# VPN flows
iptables -A INPUT -j ACCEPT -s 10.0.0.1
iptables -A OUTPUT -j ACCEPT -d 10.0.0.1
以下是步骤 1 的命令行(从我的服务器 A 运行):
ssh -o PermitLocalCommand=yes -o LocalCommand="ifconfig eth0 10.0.0.2 pointopoint 10.0.0.1 netmask 255.255.255.0" -o ServerAliveInterval=60 -w 1:1 [email protected] "ifconfig tun1 10.0.0.1 pointopoint 10.0.0.2 netmask 255.255.255.0"
奇迹般有效!
接下来我尝试将新的 VPN IP 设置为默认路由:
ip route add default via 10.0.0.1
ip route del default via my.previous.gw
这是行不通的。
知道哪里出了问题吗?
答案1
你可能已经砍断了你坐的树枝。由于您删除了以前的默认路由,因此很可能不再有通往该路由的路由given.ip.add
。
您可以通过检查输出来确认这一点,ip route get given.ip.add
如果它不再使用via my.previous.gw
,则可能是问题所在。您可以通过添加以下内容来纠正它,最好是在删除以前的默认路由之前首先添加:
ip route add given.ip.add via my.previous.gw
现在我一切都使用条件形式句子,因为我不明白这部分:
LocalCommand="ifconfig eth0 10.0.0.2 pointopoint 10.0.0.1 netmask 255.255.255.0"
我本希望这会应用于新tun1
界面,而不是eth0
.
然后,一旦这适用于10.0.0.1
,如果您希望使用任何IP 通过隧道,您的防火墙规则阻止它(假设默认策略是 DROP)。您最好更改规则以允许任何流量通过 VPN 隧道接口,而不仅仅是两个新隧道 IP 之间的流量:
iptables -A INPUT -i tun1 -j ACCEPT
iptables -A OUTPUT -o tun1 -j ACCEPT
远程对等点必须配置为路由器,并启用 NAT(例如,使用 iptables 和 MASQUERADE)。