Ezzel is vannak gondjaim.
Előszőr elviekben teszem fel a kérdést, hogy lehetséges-e ilyet csinálni:
-1) tunctl-lel készítek egy tap0 eszközt;
-2) tap0 eszköz kap egy saját IP címet és egy alhálózatot;
-3) tap0 IP-re érkező minden csomagot áttolunk az eth0 gw címre (az meg kiküldi a nagyvilágba);
-4) az eth0 gw-re beérkező minden csomagot átküldünk a tap0 IP-re;
-5) nem feltétel, hogy az eth0 magában működőképes maradjon;
-6) az kell, hogy tap0-n keresztül menjen pl. a ping;
Ezzel tesztelem:
ping -I tap0 index.hu
A válasz "destination host unreachable", viszont tcpdump -i tap0 ezt írja:
ARP, request who-has 217.20.130.97 tell 192.168.10.1
Névfeloldás megy. Arra gyanakszom, hogy a válasz már nem tud visszajönni.
Script:
#!/bin/bash
ETH_GW=192.168.2.1
ETH_IP=192.168.2.2
TAP0_IP=192.168.10.1
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/all/forwarding
# Default state
ip rule del from $ETH_IP 2>/dev/null
ip rule del from $PPP_IP 2>/dev/null
ip rule del from $TAP0_IP 2>/dev/null
ip rule del from $ETH_GW 2>/dev/null
ip rule del from $TAP0_IP 2>/dev/null
ip route flush table eth
ip route flush table ppp
ip route flush table tap
iptables -F -t filter
iptables -F -t mangle
iptables -F -t nat
iptables -F -t raw
tunctl -d tap0
# We definitely need a nameserver
echo "nameserver 192.168.2.1" >> /etc/resolv.conf
tunctl -t tap0
ifconfig tap0 $TAP0_IP up
ip rule add from $TAP0_IP to $ETH_GW
ip rule add from $ETH_GW to $TAP0_IP
ip rule add nat $ETH_GW from $TAP0_IP
ip route flush cache
Innen talán hiányzik egy "iptables -t nat -A POSTROUTING -o eth0/tap0 -j MASQUERADE" sor, de egyrészt ha betettem sem lett jobb, másrészt már az ip rule (ha jól csináltam) elvégzi a NAT-nál a címcserét (eth GW címét lecseréli a tap0 címre, hogy oda jöjjön vissza a válasz) - már ha nem rontottam el...
Szerintetek mit rontottam el?
--
http://www.open-st.eu