我正在尝试创建一个自定义代理服务器。我有一个 Rasp Pi 盒子,上面连接了 2 个 USB LTE 调制解调器和 LAN 电缆。我试图让它们与 squid 代理一起工作,这样我就可以根据内部 IP 将流量发送到特定的调制解调器的 NIC,此外,我还需要能够寻址调制解调器的管理仪表板,以便在它停止正常工作时能够通过编程重置它。所以,当我将调制解调器单独连接到 rasp 盒子时,我看到管理仪表板有默认网关的地址 - 192.168.0.1,所以我想我可以使用这个设置:
$: cat /etc/network/interfaces
source-directory /etc/network/interfaces.d
auto eth0
iface eth0 inet dhcp
allow-hotplug eth1
iface eth1 inet static
address 192.168.1.100
netmask 255.255.255.0
allow-hotplug eth2
iface eth2 inet static
address 192.168.2.100
netmask 255.255.255.0
$: ip route add 192.168.1.0/24 dev eth1 table rteth1
$: ip route add default via 192.168.1.1 dev eth1 table rteth1
$: ip route add 10.0.0.0/24 dev eth0 src 10.0.0.1 table rteth1
$: ip rule add from 192.168.1.0/24 table rteth1
$: ip rule add to 192.168.1.0/24 table rteth1
$: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
$: iptables -t mangle -A POSTROUTING -m ttl --ttl-gt 50 -o eth1 -j TTL --ttl-set 65
192.168.2.0/24 网络的设置相同。当我以这种方式配置网络并尝试请求管理仪表板(192.168.1.1)时 - 我收到此错误:
$: curl 192.168.1.1
curl: (7) Failed to connect to 192.168.1.1 port 80: No route to host
当我尝试使用以下命令进行设置时:$: ip route add default via 192.168.0.1 dev eth1 table rteth1
我得到:RTNETLINK answers: Network is unreachable
我该如何正确设置这样的网络?
答案1
我自己想通了。首先,我需要将 NIC IP 地址设置为 USB 调制解调器子网的地址 - IP 192.168.1.1 不起作用,因此:
$: cat /etc/network/interfaces
source-directory /etc/network/interfaces.d
auto eth0
iface eth0 inet dhcp
allow-hotplug eth1
iface eth1 inet static
address 192.168.0.100
netmask 255.255.255.0
allow-hotplug eth2
iface eth2 inet static
address 192.168.0.101
netmask 255.255.255.0
其次,我缺少将网关 IP 地址从一个子网转换到另一个子网的本地规则,它应该是这样的:
# Setup routing for NIC
$: ip route add 192.168.1.0/24 dev eth1 table rteth1
$: ip route add default via 192.168.0.1 dev eth1 table rteth1
$: ip route add 10.0.0.0/24 dev eth0 src 10.0.0.1 table rteth1
$: ip rule add from 192.168.1.0/24 table rteth1
$: ip rule add to 192.168.1.0/24 table rteth1
# Substitute sender ip addres by router ip address to recive back package
$: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Set up local routing, when requesting ip localy Substitute it
$: iptables -t nat -A OUTPUT -o eth1 -p tcp -d 192.168.1.1 -j DNAT --to-destination 192.168.0.1
# execute changes
ip route flush cache
相同的设置适用于具有 192.168.2.0/24 网络的 eth2 等。使用此设置,我可以通过发出请求 curl 192.168.1/2.1 来调用特定调制解调器的仪表板。我之前不知道非常方便的命令:tcpdump,在它的帮助下,我设法找出了问题:
$: tcpdump -i eth1
$: 05:28:30.685038 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:31.732788 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:32.772795 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:33.813216 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28