안녕하세요, 저는 iptables를 사용하여 Linux 시스템을 동일한 네트워크에 있는 다른 시스템에 대한 게이트웨이로 사용하려고 합니다. 두 시스템 모두에 관련된 구성은 다음과 같습니다.
- 기계 A(이것이 게이트웨이로 사용하고 싶은 것입니다)
root@router-1:~# sysctl -p
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
root@router-1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether f2:3c:91:58:5b:fb brd ff:ff:ff:ff:ff:ff
inet 172.105.89.xxx/24 brd 172.105.89.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.159.203/17 brd 192.168.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2a01:7e01::f03c:91ff:fe58:5bfb/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591978sec preferred_lft 604778sec
inet6 fe80::f03c:91ff:fe58:5bfb/64 scope link
valid_lft forever preferred_lft forever
다음과 같은 iptables 규칙이 있습니다.
# Generated by iptables-save v1.6.1 on Thu Aug 1 06:42:26 2019
*mangle
:PREROUTING ACCEPT [729:54316]
:INPUT ACCEPT [729:54316]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [539:62761]
:POSTROUTING ACCEPT [539:62761]
COMMIT
# Completed on Thu Aug 1 06:42:26 2019
# Generated by iptables-save v1.6.1 on Thu Aug 1 06:42:26 2019
*filter
:INPUT ACCEPT [493:36634]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [373:47212]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Aug 1 06:42:26 2019
# Generated by iptables-save v1.6.1 on Thu Aug 1 06:42:26 2019
*nat
:PREROUTING ACCEPT [28:1501]
:INPUT ACCEPT [28:1501]
:OUTPUT ACCEPT [5:397]
:POSTROUTING ACCEPT [2:161]
-A POSTROUTING -s 192.168.128.0/17 ! -d 192.168.128.0/17 -j MASQUERADE
COMMIT
# Completed on Thu Aug 1 06:42:26 2019
- 기계 B:
root@client:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether f2:3c:91:58:5b:62 brd ff:ff:ff:ff:ff:ff
inet 192.168.157.248/17 brd 192.168.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2a01:7e01::f03c:91ff:fe58:5b62/64 scope global mngtmpaddr dynamic
valid_lft 2591988sec preferred_lft 604788sec
inet6 fe80::f03c:91ff:fe58:5b62/64 scope link
valid_lft forever preferred_lft forever
root@client:~# ip r
default via 192.168.159.203 dev eth0 onlink
192.168.128.0/17 dev eth0 proto kernel scope link src 192.168.157.248
root@client:~# ping 192.168.159.203
PING 192.168.159.203 (192.168.159.203) 56(84) bytes of data.
64 bytes from 192.168.159.203: icmp_seq=1 ttl=64 time=0.773 ms
따라서 클라이언트 컴퓨터는 동일한 서브넷에 있기 때문에 게이트웨이 컴퓨터를 ping할 수 있지만 해당 서브넷 외부의 다른 IP에는 액세스할 수 없습니다.
답변1
내부 네트워크(소스 NAT)를 SNAT해야 할 수도 있습니다.
-A POSTROUTING -o eth0 -j eth0_masq
-A eth0_masq -s 192.168.158.203/17 -j SNAT --to-source 172.105.89.xxx/24
여기서 ".89.xxx"는 아웃바운드 연결에 사용하려는 공용 IP 주소 범위의 공용 IP 주소입니다.
답변2
마침내 나는 내 구성에 아무런 문제가 없다는 것을 발견했습니다.
문제는 공급자가 스푸핑을 피하기 위해 트래픽을 차단한다는 것입니다.