저는 iptables를 처음 사용하지만 오늘 raspian에서 간단한 대화를 구성했습니다.
# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT
# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
보시다시피 저는 openvpn을 사용하고 트래픽을 터널 인터페이스로 리디렉션하고 있습니다. 예를 들어 포트 범위 900~999 및 소스 192.168.1.5를 제외하고 인터페이스 eth1로 직접 전송하고 VPN 암호화를 방지하는 예외를 만들고 싶습니다.
어떻게 그런 규칙을 만들 수 있나요?
귀하의 의견에 진심으로 감사드립니다.
편집 : 나는 다음과 같은 것을 시도했습니다
iptables -t nat -A POSTROUTING -p tcp --dport 900:999 --out-interface eth1 -j MASQUERADE
하지만 원하는 효과는 없는 것 같습니다...
답변1
각 특정 트래픽 흐름에 대한 라우팅 테이블을 설정하려면 정책 라우팅이 필요합니다. 깔끔하고 좋은 예를 찾았어요Linux 고급 라우팅 미니 가이드.
다음 줄을 입력하세요 /etc/iproute2/rt_tables
.
1 DIRECT
그러면 다음과 같이 할 수 있습니다:
iptables -t mangle -A PREROUTING -p tcp --dport 900:999 -j MARK --set-mark 1
ip route add default via <gateway address> dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT
ip rule add from 192.168.1.5/32 table DIRECT
답변2
당신의 도움으로 나는 이 문제를 해결할 수 있었습니다. eth1에서 들어오고 나가는 규칙을 추가하고 규칙을 추가하는 대신 PREROUTING 조건을 IP 192.168.1.5에만 일치하도록 변경해야 합니다. 192.168.1.5/32 테이블 DIRECT의 IP 규칙 추가를 사용하는 라우팅 방법은 192.168.1.5의 모든 트래픽이 포트 900-999만 통과하는 대신 eth1을 통과하도록 합니다. 최종 구성은 다음과 같습니다.
# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Port exceptions
# Added -s for source address 192.168.1.5 here
iptables -t mangle -A PREROUTING -s 192.168.1.5 -p tcp --dport 900:999 -j MARK --set-mark 1
ip route add default via 192.168.2.1 dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT
도움을 주셔서 다시 한번 감사드립니다.