设置:
- 我有一个服务器设置为 DHCP (isc-dhcp-server) 和 DNS (bind9) 服务器(充当路由器)。
- 它使用 eth0 设备通过 pppoe (ppp0) 连接到互联网。
- eth1 连接到充当接入点的路由器。
- 通过接入点,客户端可以通过以太网或 WiFi 进行连接。
- 使用此处定义的 iptables 将来自 eth1 的流量转发到 ppp0(进行一些修改以匹配互联网设备):https://killtacknine.com/building-an-ubuntu-16-04-router-part-3-firewalls/。
- IPV6也以同样的方式设置。
- ufw 还通过“任何地方允许 192.168.1.0/24”规则启用。
- 服务器还通过 ppp0 连接到 VPN (PPTP),当连接时,它会获取 ppp1 作为设备名称。
我想要做的是将通过 eth1 设备通过 ppp1 连接到 VPN 的特定客户端的互联网流量(基于 IP 或 MAC 地址)转发。
我尝试使用以下规则设置 iptables:
iptables -A INPUT -i ppp1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -s 192.168.1.113 -o ppp1 -j ACCEPT
iptables -A FORWARD -i ppp1 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
但它似乎不起作用,我不知道我错过了什么,我对 iptables 的知识几乎为零。
答案1
1) 确保您的 AP 通过 eth1 连接桥梁将其自己的以太网接口连接到 WLAN 接口,否则 DHCP 将毫无用处,并且如果它执行 NAT(许多家庭路由器的默认设置),您将无法看到客户端的 IP 地址。
2)你不需要iptables
做路由(我的一个小烦恼;出于某种原因,互联网上的许多人认为他们需要防火墙规则来进行路由......)。特别是,您不需要进行 NAT(除非您的 VPN 出于某种原因需要它,但问题中没有信息来决定这一点)。
如果你想路线数据包从一个特定的客户,你需要策略路由(google一下,有很多教程)。基本上,你做
ip rule add from <source address> lookup <table name>
然后添加一个表来定义路由(在您的情况下)ppp1
以及与其关联的网关。
ip route get <dest address>
会告诉您操作系统认为数据包应该去哪里。比调试防火墙规则容易得多。
3) 使用wireshark
(或者tcpdump
,在不同的窗口中,每个感兴趣的网络接口对应一个)调试所有内容。如果没有实际查看哪些数据包使用哪些地址到达何处,就很难判断出了什么问题。