我在 Raspberry pi 2 上运行 OPENWRT Chaos Calomer。我成功配置了 OPENVPN 客户端,客户端通过 VPN 隧道路由我的流量。但是当我重新启动 pi LAN 接口时,它会在很短的时间内直接连接到 WAN 接口,并将流量路由到 VPN 隧道之外。这只会发生很短的时间。(需要启动 VPN 客户端的时间)。但我需要停止这种情况。我需要始终通过 VPN 客户端路由几乎所有的流量,如果 VPN 未连接,用户将无法访问互联网。我使用此设置配置了名为 TINYPROXY 的代理客户端,这可能会导致问题。但我不知道如何停止这种情况
这些是我的配置
/etc/config/网络
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'lan'
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ipaddr '192.168.2.1'
option dns '8.8.8.8 8.8.4.4'
config interface 'wan'
option ifname 'eth1'
option proto 'dhcp'
option peerdns '0'
option dns '8.8.8.8 8.8.4.4'
config globals 'globals'
option ula_prefix 'fd14:b495:5965::/48'
config interface 'vpn0'
option ifname 'tun0'
option proto 'none'
option auto '1'
option delegate '0'
/etc/config/防火墙
config defaults
option syn_flood '1'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
config zone
option name 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option network 'lan'
config zone
option name 'wan'
option output 'ACCEPT'
option masq '1'
option mtu_fix '1'
option input 'ACCEPT'
option forward 'ACCEPT'
option network 'wan wan6 vpn0'
config rule
option name 'Allow-DHCP-Renew'
option src 'wan'
option proto 'udp'
option dest_port '68'
option target 'ACCEPT'
option family 'ipv4'
config rule
option name 'Allow-Ping'
option src 'wan'
option proto 'icmp'
option icmp_type 'echo-request'
option family 'ipv4'
option target 'ACCEPT'
config rule
option name 'Allow-IGMP'
option src 'wan'
option proto 'igmp'
option family 'ipv4'
option target 'ACCEPT'
config include
option path '/etc/firewall.user'
config redirect
# option target 'DNAT'
# option dest 'vpn'
option name 'Transparent Proxy Redirect'
option src 'lan'
option proto 'tcp'
option dest_port '8888'
option src_dport '80'
option src_dip '!192.168.2.1'
option dest_ip '192.168.2.1'
config zone
option name 'vpn'
option masq '1'
option input 'ACCEPT'
option forward 'ACCEPT'
option output 'ACCEPT'
option network 'vpn0'
config forwarding
option src 'vpn'
option dest 'lan'
/etc/config/tinyproxy
config tinyproxy
option enabled '1'
option User 'nobody'
option Group 'nogroup'
option Port '8888'
option Timeout '600'
option DefaultErrorFile '/usr/share/tinyproxy/default.html'
option StatFile '/usr/share/tinyproxy/stats.html'
option LogFile '/var/log/tinyproxy.log'
option LogLevel 'Info'
option MaxClients '100'
option MinSpareServers '5'
option MaxSpareServers '20'
option StartServers '10'
option MaxRequestsPerChild '0'
option ViaProxyName 'tinyproxy'
list Allow '127.0.0.1'
list Allow '192.168.2.1/24'
list ConnectPort '443'
list ConnectPort '563'
list ConnectPort '80'
option Filter '/www/textui/tinyproxy/blocked.txt'
我想要实现这个目标
用户 --> LAN --> TINYPROXY --> VPN --> WAN
我的 TINYPROXY 运行正常。所有其他配置都运行正常。问题只在 PI 重启时存在一小段时间
有人能帮助我吗?
答案1
对我来说,这是一个难题。我可以提供部分解决方案,以及一个测试完整解决方案的想法。
如果这是一个常规的 Linux,例如 Debian,可以在文件/etc/network/interfaces
的外部接口节(我们称之为wan
)中插入以下行:
pre-up iptables -A OUTPUT -s 192.168.0.0/24 -o wan -j DROP
我假设您的 LAN 是 192.168.0.0/24。我们使用的事实pre-up
确保了当wan
接口启动时防火墙规则是有效的。与规则一起:
iptables -t nat -A POSTROUTING -o wan -j MASQUERADE
我们可以确保来自 LAN 的数据包只能通过tun0
,即使在等待 OpenVPN 与其服务器建立连接时一些数据包会被丢弃。
但是,我无法在 OpenWRT 的网页上找到pre-up
上述条件的替代方案。因此,如果您使用上述两个规则设置防火墙,则可以确保 LAN 中的任何数据包都不会离开路由器,进入 OpenVPN 之外。但您不确定 iptables 防火墙是否在联网之前启动。
在这个 OpenWRT Wiki 页面,不同服务的执行顺序解释一下:
rcS 使用选项“start”执行位于 /etc/rc.d/S##xxxxxx 中的实际启动脚本的符号链接:
.....
S40network 启动网络子系统(运行 /sbin/netifd,启动接口和 wifi
S45firewall 从 /etc/config/firewall 创建并实施防火墙规则
您会看到两个服务相继启动,这使得数据包几乎没有时间传递;这肯定比等待 OpenVPN 启动要好。这是我的部分解决方案:这是部分的,因为我缩短了 LAN 数据包可以通过的时间,但我有不是这次做.=0
您可以尝试颠倒这两项服务,IE重命名它们:
S40firewall
S45network
看看这是否有效。我不确定iptables/netfilter
当它试图保护的接口甚至不存在时会发生什么。在我的 Debian 上,这很有效,但由于我没有 OpenWRT 可以尝试,所以我不能肯定这对你也有效。这是我对完整解决方案的建议。干杯。
答案2
问题是你的数据包不是来自lan
,而是来自运行代理的路由器。防火墙中没有强制传出流量通过 VPN 的规则在路由器上。
我还没有尝试过,但是...
option output REJECT
在您的接口中设置wan
,然后添加特定规则以允许wan
在 vpn 启动之前将接口上的传出流量发送到路由器所需的服务器和端口(dhcp、OpenVPN)。在这些规则中,您将有option output ALLOW
和,option dest wan
但不要设置src
。
或者,继续允许区域上的传出流量,并创建阻止到 WAN 的 HTTP 流量的规则。同样,不要设置src
。