AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 776869
Accepted
mc51
mc51
Asked: 2016-05-16 01:31:08 +0800 CST2016-05-16 01:31:08 +0800 CST 2016-05-16 01:31:08 +0800 CST

除了规则中的某些 IP 在 vpn 断开连接时不允许通过 openwrt + openvpn 上网

  • 772

我的网络上有以下工作设置:

A. ISP-Router (连接到 inet, 内部 ip 192.168.0.1 ) <----> B. eth0 - OpenWrt 路由器 (OpenVPN 客户端运行) br-lan (bridge eth1 + wlan0, ​​ip 192.168.1.0) <-- --> C.多个客户端

这个想法是所有客户端连接都通过 B. B 通过 VPN 路由所有内容。如果 VPN 连接中断,客户端将无法再访问 Internet。因此,如果 vpn 连接出现问题,我会防止客户端暴露自己。

我的 OpenWrt 路由器设置取自这里:https ://blog.ipredator.se/howto/openwrt/configuring-openvpn-on-openwrt.html

总结一下:

1 相关设备:

root@OpenWrt:~# ifconfig
br-lan    Link encap:Ethernet  
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
eth0      Link encap:Ethernet  
          inet addr:192.168.0.16  Bcast:192.168.0.255  Mask:255.255.255.0
tun0      Link encap:UNSPEC  
          inet addr:10.33.197.41  P-t-P:10.33.197.41  Mask:255.255.0.0

2 个相关的防火墙区域:

config zone
option name 'lan'
option network 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'REJECT'

config zone
option name 'wan'
option output 'ACCEPT'
option forward 'REJECT'
option network 'wan'
option input 'ACCEPT'

config zone
option name 'vpn'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'vpn'

config forwarding
option dest 'vpn'
option src 'lan'

3 路由表如下所示:

root@OpenWrt:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.33.0.1       128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
10.33.0.0       0.0.0.0         255.255.0.0     U     0      0        0 tun0
46.122.122.89   192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.33.0.1       128.0.0.0       UG    0      0        0 tun0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.1     0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br-lan

到目前为止,此设置的所有内容都可以正常工作。但是,现在我想绕过特定 IP/主机的 vpn。因此,即使在 vpn 断开连接时也可以使用它们。我的想法是为这些 IP 添加直接通过 A (ip rule add ...) 的路由。这不起作用,因为我似乎还必须调整我的防火墙设置。不幸的是,阅读 iptables 的基础知识并没有让我明白要进行哪些更改。

/edit:尝试并进一步研究,我认为理论上有两种解决方案。但是,我不知道如何使它们工作:

  1. 保持上述概念,我需要:

    • 为我的 wan_zone 添加 MASQUERADE(我这样做了)
    • 添加从 lan 到 wan 和从 wan 到 lan 的 FORWARD 规则(我可以这样做,但随后我失去了“vpn 故障保护”),这些规则取决于我要访问的 IP(我不知道是否以及如何访问)作品)
  2. 改变概念并摆脱 iptables 而是使用 iproute2 和基于策略的路由(http://www.linupedia.org/opensuse/Policy_Based_Routing)

    • 默认情况下,仅通过 vpn 路由所有内容
    • 有条件地通过 A. 直接路由特定 IP

但是,这似乎更加复杂,至少对我来说是这样,因为我从未使用过它。

routing openvpn iptables openwrt policy-routing
  • 1 1 个回答
  • 1076 Views

1 个回答

  • Voted
  1. Best Answer
    mc51
    2016-05-16T05:05:10+08:002016-05-16T05:05:10+08:00

    /edit:好的,我找到了一个非常适合我需要的解决方案。

    我已经设法改进了下面的第一个工作想法。特别是,现在我可以管理要在外部列表中直接路由/转发到 A 的 ips 列表。我已将以下内容添加到 /etc/firewall.user

    # If connection was established before, accept it (so we dont have to deal with inbound connections)
    iptables -A forwarding_rule -m state --state ESTABLISHED,RELATED -j ACCEPT
    # Read ips from file
    FORWARDIPS=$(egrep -v -E "^#|^$" /etc/forward_ip)
    
    # create new iptables and route table entries for each ip in the file
    # allow forward if packet matches destination and route it through "table admin", for which we set a default gateway below 
    for ipblock in $FORWARDIPS
    do
       iptables -A forwarding_rule -d $ipblock -j ACCEPT -p all
       ip rule add to $ipblock table admin
    done
    ~
    
    root@OpenWrt:~# cat /etc/forward_ip 
    54.164.36.0/24
    8.31.8.0/22     
    

    我需要在启动时从另一个文件中调用以下命令(我将其放入 /etc/rc.local):

    # Route everything in table admin by default through ISP-Router
    ip route add default via 192.168.0.1 dev eth0 table admin  
    

    还编辑 /etc/iproute2/rt_tables 并添加以下行:

    10     admin
    

    /edit,这是我的第一个解决方案:

    我找到了解决方案。但是,它可以大大改进。这个想法遵循我在 /edit 1 中的直觉。我为我的 wan 区域启用伪装,并为特定目标 IP 在我的 lan 和 wan 区域之间启用条件转发。不过,我不能为配置规则添加多个“选项 dest_ip”。因此,最好将我在 uci 防火墙配置中所做的作为 iptables 规则添加到 /etc/firewall.user

    我编辑了 /etc/config/firewall 并更改了配置区域并添加了配置规则

    config zone
            option input 'ACCEPT'
            option output 'ACCEPT'
            option name 'wan'
            option network 'wan'
            option forward 'REJECT'
            option masq '1'
            option mtu_fix '1'
    
    config rule
            option target 'ACCEPT'
            option src 'lan'
            option dest 'wan'
            option name 'Lan to Wan'
            option proto 'all'
            option dest_ip '54.164.36.190'
            option enabled '0'
    

    经过一番尝试,我在 /edit 2 中放弃了我的想法,因为有许多无法预料的障碍。例如,如果没有从 B 到 A 的默认网关,我首先无法建立我的 vpn 连接。尽管如此,我想如果你比我对路由有更好的理解,就可以做到。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 将路由永久添加到 Solaris 10

  • Quagga 套件中的 ./configure --disable-zebra 代表什么?

  • 使用特定接口进行出站连接(Ubuntu 9.04)

  • Linux TC/策略路由工具

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve