linux – 从NAT中免除某些设备
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 从NAT中免除某些设备,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4145字,纯文字阅读大概需要6分钟。
内容图文
![linux – 从NAT中免除某些设备](/upload/InfoBanner/zyjiaocheng/957/59fb65b570ea404b9edcd9515549237d.jpg)
我的家庭网络目前看起来像这样:
我想重组它看起来像这样(摆脱ISP交换机并将STB插入我的):
我的网关是一台带有两个以太网端口的PC(做NAT并为我的局域网提供DHCP和DNS)并运行GNU / Linux.
障碍是ISP的机顶盒(机顶盒,如有线电视盒,但使用以太网上的IPTV).它们发送DHCP请求,当ISP网关收到该请求时,将使用内部IP(10.x.y.z)而不是WAN来应答.这些设备尝试连接的IPTV门户只能从内部IP访问.
因此,我需要有效地做的是使我的网关像具有特定MAC地址的设备的交换机(桥?)一样.
我猜我需要做以下事情:
>添加iptables规则,将源地址与STB的MAC匹配的数据包从LAN直接复制到WAN接口
>添加iptables规则,将目的地址与STB的MAC匹配的数据包从WAN直接复制到LAN接口(即与上述相反)
>确保网关的DHCP服务器不回复STB的DHCP请求
>从NAT-ing中释放来自STB的MAC的数据包?
>我需要担心ARP请求吗?
解决方法:
为了回答所述的问题,我从朋友网络大师那里得到了一些建议来桥接LAN和WAN接口,然后使用ebtables过滤掉要连接的内容:
lan0: [add LAN IPs and use as LAN interface]
eth0 (LAN)
eth1 (WAN) [add WAN IPs and use as WAN interface]
# Forward traffic to/from STBs
ebtables -A FORWARD -i eth0 -o eth1 -s $STB_MAC -j ACCEPT
ebtables -A FORWARD -i eth1 -o eth0 -d $STB_MAC -j ACCEPT
# Allow DHCP responses
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j ACCEPT
# Allow ARP requests
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p arp --arp-ip-dst ! $LAN_SUBNET -j ACCEPT
# The WAN is not really part of the LAN
ebtables -A INPUT -i eth1 -j DROP
ebtables -A FORWARD -i eth1 -j DROP
ebtables -A FORWARD -o eth1 -j DROP
ebtables -A OUTPUT -o eth1 -j DROP
# Allow eth1 to be used to access the WAN
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -j DROP
但是,在这种情况下,事实证明ISP交换机正在进行基于端口的VLAN标记(PC端口为一个VLAN,STB端口为另一个VLAN).
因此,为了摆脱ISP路由器,我需要:
>在网关的WAN NIC上设置两个VLAN
>将WAN IP配置从NIC移至WAN VLAN(包括NAT)
>从网关的DHCP服务器中将STB的MAC地址列入黑名单
>使用我的LAN桥接ISP的内部VLAN
>(可选)添加防火墙规则以避免LAN数据包泄漏到ISP VLAN.
这是因为ISP DHCP服务器已经只回复STB的DHCP请求,因此在网关上将它们列入黑名单会导致所有DHCP回复都被网关或ISP DHCP服务器应答.如果使用dnsmasq,则可以使用例如dnsmasq进行黑名单. dhcp-host = 01:23:45:*:*:*,在/etc/dnsmasq.conf中忽略.
其他所有内容都可以使用systemd-networkingd配置文件完成:
– 为VLAN创建.netdev文件
– 将它们(作为VLAN条目)添加到WAN NIC上匹配的.network文件中
– 为VLAN创建.network文件
– 为LAN / STB桥创建.netdev文件
– 将STB VLAN和LAN NIC添加到网桥
这是一组完整的systemd-networkingd配置文件:
> /etc/systemd/network/isp-link.network – WAN NIC的网络配置:
这里我们只设置VLAN.确保将VLAN ID更改为ISP使用的VLAN ID.此示例使用1234作为WAN VLAN,使用56作为内部(IPTV)接口.
[Match]
Name=eno1
[Network]
VLAN=eno1.1234
VLAN=eno1.56
> /etc/systemd/network/eno1.1234.netdev – WAN VLAN:
[NetDev]
Name=eno1.1234
Kind=vlan
[VLAN]
Id=1234
> /etc/systemd/network/eno1.56.netdev – 用于IPTV的ISP内部VLAN:
[NetDev]
Name=eno1.56
Kind=vlan
[VLAN]
Id=56
> /etc/systemd/network/home-bridge.netdev – ISP-VLAN /家庭局域网桥接设备:
[NetDev]
Name=br0
Kind=bridge
> /etc/systemd/network/home-bridge.network – 所述网桥的网络:
确保不在此处启用DHCP服务器.由于systemd-networkd不允许配置要忽略的MAC黑名单,因此您需要使用其他DHCP服务器(例如dnsmasq).
[Match]
Name=br0
[Network]
Address=192.168.0.1/24
IPForward=yes
IPMasquerade=yes
DHCP=no
DHCPServer=no
> /etc/systemd/network/home-lan.network – LAN NIC的网络文件:
[Match]
Name=enp9s0
[Network]
Bridge=br0
> /etc/systemd/network/isp-vlan-wan.network – 您网关的WAN配置:
这使用DHCP – 如果您有静态配置,请将其更改为地址/网关/ DNS设置.
[Match]
Name=eno1.1234
[Network]
IPForward=yes
DHCP=yes
> /etc/systemd/network/isp-vlan-internal.network – 内部VLAN的网络文件:
[Match]
Name=eno1.56
[Network]
Bridge=br0
> /etc/dnsmasq.conf – DHCP服务器配置:
# Disable DNS server - will be handled by systemd-networkd
port=0
# Enable and configure DHCP server
dhcp-range=192.168.0.129,192.168.0.254,12h
# Specify which interfaces to listen on
listen-address=127.0.0.1
listen-address=::1
listen-address=192.168.0.1
# Ignore DHCP requests from the STBs
dhcp-host=01:23:45:*:*:*,ignore
内容总结
以上是互联网集市为您收集整理的linux – 从NAT中免除某些设备全部内容,希望文章能够帮你解决linux – 从NAT中免除某些设备所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。