我正在使用 iptables 来标记包并希望根据标记进行路由。
首先我添加了ip规则:
sudo ip rule add fwmark 1 prohibit
Run Code Online (Sandbox Code Playgroud)
(“禁止”仅用于测试,稍后我将其更改为某个路由表。)
然后我开始标记包裹:
sudo iptables -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1
Run Code Online (Sandbox Code Playgroud)
但是电脑仍然可以访问192.168.1.0/24网络。
经过长时间的谷歌搜索和挣扎,我尝试过:
sudo iptables -t mangle -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1
Run Code Online (Sandbox Code Playgroud)
它有效并且连接被阻止。
在第一种情况下,使用过滤器的默认表。所以我的问题是 mangle table 和 filter table 之间有什么区别?在什么情况下应该使用哪一个?据我了解,所有这些表都会在路由策略之前进行查询,那么为什么过滤表不能正常工作呢?
$ ip link | grep vboxnet
10: vboxnet0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
Run Code Online (Sandbox Code Playgroud)
在尖括号中,它说UP。尖括号表示什么?
进一步,它声称state DOWN。这似乎与之前的信息相冲突。接口是up还是down?
在手册页、ip-link、ip和 中ip-address,我找不到尖括号的含义。
在没有专用 Ubuntu 客户端的情况下,如何使用 ZScaler 通过 Ubuntu 访问受保护的网站?
根据发行版,调用ip link set <iface> up(或 down;还有 ifup / ifdown)将查看各种配置文件(Debian 上的 /etc/network/interfaces 我认为,Gentoo 有 /etc/conf.d/net...),并进行更改(例如与 DHCP 交互等)
据我所见strace,该ip命令直接与内核对话(是这样吗?)。但最终,有人启动这些 shell 脚本/读取配置。这背后的机制是什么?init 系统是否在某些内核接口上侦听 up/down 状态更改并启动这些脚本?或者有什么不同吗?
根据我的理解,iptables 在传输层(第 4 层)上工作,发生的任何数据包过滤都基于第 4 层的 ip 协议,如 tcp 和 udp。因此,如果我们在iptables -p选项中输入 esp、gre 和 l2tp 等协议,这是否有意义?我们可以使用 iptables 过滤基于第 2/3 层协议的数据包吗?如果不是,那么iptables是如何基于icmp协议过滤数据包的呢?
iptables 新手,我仍在学习。谢谢!
有没有办法确定给定 IP 地址将在 bash/shell 语言中通过 \xe2\x80\xa6 路由到哪个 netdev 或 IP 链接接口?
\n这与 IP 地址是什么(给定网络设备名称)无关。
\n给定目标 IP 地址,bash 将自动确定(在操作系统的内部 IP 路由表的帮助下netstat -i -n)打印网络设备名称。
在我的机器上,我有两个接口:(wlan0默认路由)和tun0. 该tun0接口只是一个本地网络,它的 IP 范围是172.16.150.0/24,我的机器(机器 A)的 IP 地址是172.16.150.1,另一台机器(机器 B)的 IP 地址是172.16.150.128。我设置了一个 wifi 热点,它为我创建了另一个界面ap0。我想ap0通过机器B路由来自接口的所有流量(因此网关应该是172.16.150.128)。
$ ip route
default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.179 metric 1024
172.16.150.0/24 dev tun0 proto kernel scope link src 172.16.150.1 metric 1024
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.179 metric 1024
192.168.0.1 dev wlan0 proto dhcp scope link src 192.168.0.179 metric 1024
192.168.12.0/24 dev ap0 …Run Code Online (Sandbox Code Playgroud) 运行(可能已损坏)openvpn 脚本后,我有一个 IP 路由表,其中一个条目是 URL:
# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.0.0.1 0.0.0.0 UG 0 0 0 wlp58s0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlp58s0
google.com 10.0.0.1 255.255.255.255 UGH 0 0 0 wlp58s0
Run Code Online (Sandbox Code Playgroud)
如何删除最后一行?常规方式抛出错误:
# ip route del google.com
Error: any valid prefix is expected rather than "google.com".
Run Code Online (Sandbox Code Playgroud)
如果这很重要,我在 gentoo linux 上。
我想知道在哪里查找应用于自定义命名空间的更改。假设我有一个命名空间“ns1”,里面有虚拟接口“vpeer”和“lo”,我想通过 dnsmasq 或 hostapd 修改接口“vpeer”的配置,然后我知道我可以这样做,例如
$ ip netns exec ns1 bash
$ dnsmasq --interface=vpeer-ns1 --dhcp-range=192.168.0.100,192.168.0.200,255.255.255.0
Run Code Online (Sandbox Code Playgroud)
并且 netns 正在通过为我安装它并管理任何任务来完成其余的工作,我对此表示感谢。但是,在全局命名空间中,我可以监视在相应文件中所做的更改或直接将它们应用到文件中。例如在/etc/dnsmasq.conf或/etc/hostapd/hostapd.conf 中。
所以我的问题是,如何在某个 netns 命名空间中复制默认命名空间行为。我真的需要知道我已经做了什么以及“ns1”中接口的当前配置是什么。尤其是因为大多数教程都解释了这样的过程。该IP netns手册页说,配置文件位于
$ /etc/netns/ns1/
Run Code Online (Sandbox Code Playgroud)
但在创建命名空间“ns1”后,甚至目录 /etc/netns 都不存在。新命名空间仅在 /var/run/netns/ns1 中表示。该文件始终为空 - 即使在应用上述 dnsmasq 命令之后 - 并且 nano 显示为空文件,但在文件关闭后给我一些奇怪的错误说
ns1: Argument is invalid.
Run Code Online (Sandbox Code Playgroud)
所以我切换到命名空间“ns1”并再次尝试。结果一样。所以我关闭了新命名空间中的每个设备
$ ip netns exec ns1 ip link set dev lo down
$ ip netns exec ns1 ip link set dev vpeer down
Run Code Online (Sandbox Code Playgroud)
同样的结果。
那么如何访问与给定命名空间相关的配置文件,因为应用程序根本不知道非默认命名空间?先感谢您。