짧은 이야기,
3 개의 인터페이스, eth0 (LAN), eth1 (ADSL), eth2 (4G).
eth0-> eth1 : 작동
(포트 80, 443, 4070) eth0-> eth2 : 발생하지 않음
이것은 아이디어를 그래픽으로 표현한 것입니다.
eth2를 통한 포트 80 & 443
개미 eth1을 통한 나머지
Netscheme :
eth0: -ip 10.0.0.1 -net 10.0.0.0/8 -gw 10.0.0.1 (the servers own intf)
eth1: -ip 192.168.1.74 -net 192.168.1.0/24 -gw 192.168.1.254
eth2: -ip 192.168.1.91 -net 192.168.0.0/24 -gw 192.168.0.1
이 새로운 스크립트는 22와 4070을 적절한 테이블로 다시 라우팅한다고 생각합니다.
그러나 해당 테이블에 도달 한 후에는 eth2로 다시 라우팅되지 않습니다.
이 스크립트는 22와 4070을 제외하고 작동합니다!
(포트 80은 주석 처리되어 있지 않으며 작동하지만 eth1을 통해 작동합니다.)
modprobe iptable_nat
modprobe ip_conntrack
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -F PREROUTING
iptables -t nat -F
iptables -t mangle -F
iptables -F
# This next line restores any issues trying to connect to something
# if you get weird ACK packets when trying to connect (at least i did)!
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
ip route flush table main
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 22 -j MARK --set-mark 1
### iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 4070 -j MARK --set-mark 1
## Setup routes
# LAN
route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0
# ADSL
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
# 4G (Only accessible if marking packages with \x01
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth2
# Default via ADSL
## -- Does the same as ip route below? route add default gw 192.168.1.254
echo "201 eth2.out" >> /etc/iproute2/rt_tables
ip rule add fwmark 1 table eth2.out
ip route add default via 192.168.0.1 dev eth2 table eth2.out
ip route add default via 192.168.1.254 dev eth1
## Setup forwards
# From 4G to LAN
iptables -A FORWARD -i eth2 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From ADSL to LAN
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From LAN to ADSL (Default route out)
# - Note: If marked packages is sent to ADSL they will be mangled and rerouted to 4G
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
이전 스크립트 :
Ignore everything below unless you're interested in retracing my steps!!
내가 나쁜 일을 할 수 있도록 환경을 설정하기 위해 router.sh 스크립트를 만들었습니다. 4G 연결로 보내고 자하는 3 개의 포트가 있고 나머지는 유선 ADSL 연결을 통해 있습니다. 이를 위해 iptables가 기본 경로에서 패키지를 맹 글링하고 --dport == 443 | 80 | 4070
그러나 이것은 작동하지 않습니다. 나는 어쨌든 여전히 내 유선을 통해 라우팅되고 있습니다.
이것은 내 스크립트 모양입니다 :
#!/bin/bash
## routing tables
# wireless = 4G via eth2
# adsl = adsl via eth1
modprobe iptable_nat
modprobe ip_conntrack
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
ip route flush table main
ip route flush table wireless
ip route flush table adsl
## Setup routing tables
# ADSL
ip route add table adsl to 192.168.1.0/24 dev eth1
# 4G
ip route add table wireless to 192.168.0.0 dev eth2
ip rule add fwmark 0x1 table wireless
## Setup routes
# LAN
route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0
# ADSL
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
# 4G (Only accessible if marking packages with \x01
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth2
# Default via ADSL
route add default gw 192.168.1.254
## Forward ports into the LAN
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 10.0.0.3:80
## Lets mark all packets we want for 4G forward
# HTTPS
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# HTTP
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 80 -j MARK --set-mark 1
# Spotify
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 4070 -j MARK --set-mark 1
## Setup forwards
# From 4G to LAN
iptables -A FORWARD -i eth2 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From ADSL to LAN
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# From LAN to ADSL (Default route out)
# - Note: If marked packages is sent to ADSL they will be mangled and rerouted to 4G
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -j LOG
#iptables --table nat --append POSTROUTING --out-interface eth2 --jump SNAT --to-source "192.168.1.74"
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
또한이 3을 스크립트의 맨 아래에 추가하려고했습니다.
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 80 -j SNAT --to "192.168.0.91"
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 443 -j SNAT --to "192.168.0.91"
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 4070 -j SNAT --to "192.168.0.91"
또한 성공하지 않고 시도했습니다.
iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 1
마지막으로 시도한 것 :
## Lets mark all packets we want for 4G forward
# HTTPS
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# HTTP
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 80 -j MARK --set-mark 1
# Spotify
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 4070 -j MARK --set-mark 1
라우팅이 작동하고 웹을 탐색하고 음악을 듣고 무엇을들을 수는 있지만 잘못된 인터페이스를 통해하고 있습니다. 나는 오랫동안 구글 검색을 해 왔으며 내가하고있는 일과 내가하는 일을 이해하기 위해 약간의 조각과 조각을 발견했습니다. 나는 tc를 통해 트래픽 쉐이핑을 할 수 있지만 iptables에 패키지를 표시하여 가능하다면 먼 길을 도울 것입니다.
내 생각에 다른 규칙, 주로 MASQUERADE 부분 에서 순서를 잘못하고 있습니까? 아니면 거기에 있어야합니까?
누군가 외부 인터페이스 (하나 또는 둘 다 프로토콜)에서 내부 10.0.0.0 주소 공간으로 tcp : 80 으로 DNAT 포트를 말하는 방법을 설명 할 수 있습니까 ?
출력 :
root@Netbridge:~# route -n Kernel IP routing table Destination
Gateway Genmask Flags Metric Ref Use Iface<br>
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth1<br>
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0<br>
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2<br>
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
root@Netbridge:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:7e:9e:4e
inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0
eth1 Link encap:Ethernet HWaddr 00:0c:29:7e:9e:58
inet addr:192.168.1.74 Bcast:192.168.1.255 Mask:255.255.255.0
eth2 Link encap:Ethernet HWaddr 00:0c:29:7e:9e:62
inet addr:192.168.0.91 Bcast:192.168.0.255 Mask:255.255.255.0
다음 지침을 따르십시오.
출력 트래픽에 다른 인터페이스 기반의 대상에 대한
iptables- 앞으로 특정 포트에서 특정 NIC까지
몇 가지 다른 관련 스레드 중에서.
ethX
IP 주소의 소켓을 바인딩 하면 ethX
LAN의 호스트가 IP 주소 를 사용하여 로컬 서버에 액세스하는 ethY
것을 막을 수 있으며 호스트가 IP 주소를 ethY
사용하여 서버에 액세스하는 것을 막을 수 없습니다 ethX
. Linux는 약한 호스트 모델을 사용합니다.
localhost
를eth2
인터페이스 주소와 주소 에만 바인딩하지 않는 이유가 있습니까?