Iptables
為多個 USB 調製解調器 linux 配置路由
我正在嘗試創建自定義代理伺服器。我有一個帶有 2 個 USB LTE 調製解調器和 LAN 電纜的 Rasp Pi 盒子。我試圖讓它們與 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
我怎樣才能正確設置這樣的網路?
我自己想通了。首先,我需要將 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